Gradle插件用于默认属性

时间:2014-10-13 16:12:12

标签: groovy gradle

我正在尝试(并且失败:))创建一个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会很容易,但我的学习知识仍在不断发展:)

提前感谢任何见解!

2 个答案:

答案 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'} }