我正在尝试(并且失败:))创建一个gradle插件,该插件具有一组默认的依赖项版本,并且可以在调用我的插件的gradle.build文件中重写。理想情况下类似于下面的sudo代码
MyDefaultPropertiesPlugin.groovy
project.versions.springBoot="1.0.0-RELEASE"
MyPlugin.groovy
project.apply plugin: MyDefaultPropertiesPlugin
compile("org.springframework.boot:spring-boot-starter-web:${project.versions.springBoot}")
的build.gradle
versions.springBoot = "1.1.0-RELEASE"
project.apply plugin "my.plugin"
我尝试使用扩展,但在覆盖时通过排序运行到isssue。 (版本不存在) 我非常感谢任何建议,maven会很容易,但我的学习知识仍在不断发展:)
提前感谢任何见解!
答案 0 :(得分:0)
插件必须推迟访问构建模型,直到评估构建脚本为止。最简单的解决方案是使用project.afterEvaluate {}
,但还有其他解决方案。有关详细信息,请参阅此处或http://forums.gradle.org上的类似问题的答案。
答案 1 :(得分:0)
提出了一个非常可行但如果不是完美的解决方案,如果我想到更好的东西,我会更新,我的学习水平处于学习水平,所以请赞扬这是否可以改进。 这允许我定义一组版本和客户端,用一个简单的属性
覆盖这些版本MyDefaultVersionsPlugin.groovy
class MyDefaultVersionsPlugin implements Plugin<Project>{
project.extensions.create('versions', MyVersions, project)
}
class MyVersions{
String spring
String slf4j
public MyVersions (Project project){
spring = setVersion(project,'springVersion', 'x.x.x.x')
slf4j = setVersion(project,'slf4jVersion', 'x.x.x.x')
}
private static String setVersion(Project project, String name, String version){
if(project.hasProperties(name)){
return project.getProperties().get(name)
}
else {
return version
}
}
}
MyPlugin.groovy
project.apply plugin: MyDefaultVersionsPlugin
compile("org.springframework.boot:spring-boot-starter-web:${project.versions.spring}")
的build.gradle
buildscript { ext { springVersion = 'x.x.x.x'} }