在gradle中,如何为插件版本使用变量?
我的一个构建脚本导入了nebula插件:在gradle中,如何为插件版本使用变量?,gradle,netflix-nebula-plugins,Gradle,Netflix Nebula Plugins,我的一个构建脚本导入了nebula插件: plugins { id 'nebula.ospackage' version '3.5.0' } 我一直在将我的所有版本信息移动到一个单独的文件中,所有项目都可以访问该文件,我想知道转换为以下内容的正确语法是什么: plugins { id 'nebula.ospackage' version "$versions.nebula_gradle_ospackage_plugin" } 当我尝试使用“gradle clean build”运行上
plugins {
id 'nebula.ospackage' version '3.5.0'
}
我一直在将我的所有版本信息移动到一个单独的文件中,所有项目都可以访问该文件,我想知道转换为以下内容的正确语法是什么:
plugins {
id 'nebula.ospackage' version "$versions.nebula_gradle_ospackage_plugin"
}
当我尝试使用“gradle clean build”运行上述命令时,我得到以下错误:
生成文件“build.gradle”:2:参数列表必须正好是1个文本
非空字符串
看
有关插件{}块的信息
@第2行,第33列。
id“nebula.ospackage”版本“$versions.nebula\u gradle\u ospackage\u插件”
链接的文章展示了如何使用“buildscript”块,它可以工作,但似乎必须有一种方法可以在一行中工作?您不能在此处使用变量: 其中«插件版本»和«插件id»必须是常量、文字, 串。不允许有其他声明;他们的存在将引起一场灾难 编译错误
您不能在此处使用变量: 其中«插件版本»和«插件id»必须是常量、文字, 串。不允许有其他声明;他们的存在将引起一场灾难 编译错误 这是一篇老文章,但仍然开放,我发现这篇文章在寻找解决办法 看起来你已经意识到了这一点,实际上也意识到了,但我认为这可能会帮助其他人像我一样找到这篇文章。以下解决方法基于,并为我解决了问题:
buildscript{
分机{
springBootVersion='2.0.4.RELEASE'
}
存储库{
jcenter()
}
依赖关系{
类路径(“org.springframework.boot:spring-boot-gradle插件:${springBootVersion}”)
}
}
插件{
id‘java’
//和其他插件
id“io.spring.dependency management”版本“1.0.6.RELEASE”
}
//但具有可变版本的应用程序采用的是旧方法:
应用插件:“org.springframework.boot”
//我们也可以在依赖项中使用变量:
依赖关系{
编译组:'org.springframework.boot',名称:'springbootstarterweb',版本:springBootVersion
// ...
}
这是一篇旧文章,但仍然开放,我发现这篇文章正在寻找解决方法
看起来你已经意识到了这一点,实际上也意识到了,但我认为这可能会帮助其他人像我一样找到这篇文章。以下解决方法基于,并为我解决了问题:
buildscript{
分机{
springBootVersion='2.0.4.RELEASE'
}
存储库{
jcenter()
}
依赖关系{
类路径(“org.springframework.boot:spring-boot-gradle插件:${springBootVersion}”)
}
}
插件{
id‘java’
//和其他插件
id“io.spring.dependency management”版本“1.0.6.RELEASE”
}
//但具有可变版本的应用程序采用的是旧方法:
应用插件:“org.springframework.boot”
//我们也可以在依赖项中使用变量:
依赖关系{
编译组:'org.springframework.boot',名称:'springbootstarterweb',版本:springBootVersion
// ...
}
从Gradle 5.6开始,您可以在Gradle.properties
文件中声明插件版本,并在插件
块中引用这些属性
例如,gradle.properties
文件:
springBootVersion=2.2.0.RELEASE
build.gradle中的插件
块
:
plugins {
id "org.springframework.boot" version "${springBootVersion}"
}
请参阅:
另见:
从Gradle 5.6开始,您可以在
Gradle.properties
文件中声明插件版本,并在plugins
块中引用这些属性
例如,gradle.properties
文件:
springBootVersion=2.2.0.RELEASE
build.gradle中的插件
块
:
plugins {
id "org.springframework.boot" version "${springBootVersion}"
}
请参阅:
另见:
总结
插件
块中省略版本buildscript.dependencies
块中移动/指定版本const
变量plugin
块需要字符串文本或属性,而dependency
块允许变量。最初的问题要求在“一行”中完成这项工作,使用这种方法,您的插件块更短,所有模块的所有依赖项都位于一个位置。根据你的目标,这可能比在“一行”中完成所有事情要好
完整示例
对于Android,我可以通过从插件
块中省略该版本,然后在buildscript依赖项中将其指定为const
来实现这一点。该块允许变量,而插件块只允许字符串文本。从这里开始,我在buildSrc
中使用一个对象,因为它提供了最大的灵活性,同时将所有模块的所有依赖关系信息保存在一个文件中。因此,我的设置如下所示:
├── project/
│ ├── build.gradle
| └── app/
| └── build.gradle
| └── buildSrc/
| └── build.gradle.kts
| └── src/main/java/com/example/package/Deps.kt
从这里开始,为了在一个地方将任何插件版本指定为变量,app/build.gradle
文件省略了该版本(以kotlin为例,但同样的方法适用于任何插件):
app/build.gradle
插件{
id'kotlin android'//此处省略version属性,但在buildscript依赖项中提供它
...
}
...
依赖关系{
...
//匕首
实现Deps.Dagger.ANDROID_支持
kapt Deps.Dagger.ANDROID_处理器
卡普特副警长匕首
}
然后buildscript依赖项部分(通常在父build.gradle
文件中,但也可以在同一文件中)使用变量提供版本
project/build.gradle
import com.example.package.Deps//buildSrc文件夹中包含所有版本信息的对象
构建脚本{
依赖关系{
类路径“org.jetbrains.kotlin:kotlin gradle插件:${Deps.kotlinVersion}”
}
}
最后,所有版本信息都在buildSrc中通过一个对象进行管理