gradle - 如何使用GradleBuild任务在插件中正确使用gradle扩展?

标签 gradle gradle-plugin

编辑:考虑到David M. Karr的提议,我改掉了我的问题。

我正在编写gradle插件。该插件正在启动扩展GradleBuild的任务。外部gradle构建文件需要一些信息作为参数。这些参数在项目扩展中给出。

插件代码

class MyPlugin implements Plugin<Project> {

    def mExt

    void apply(Project project) {

        mExt = project.extensions.create('myext',MyExt)

        project.task('myTask', type:GradleBuild){
            def param = new StartParameter()
            param.setProjectProperties([target:getTarget()])

            // Problem here
            startParameter = param
            buildFile = getMyBuildPath()
            tasks = [
                'build',
                'generateDebugJavadocJar'
            ]
        }
    }

    def getMyBuildPath(){
        ...
    }

    // Problem here
    def getTarget(){
        return {mExt.target}
    }
}

class MyExt {
    def String target = "uninitialised"
}

Gradle构建文件:
apply plugin : 'com.example.myplugin'

ext{
    target = "myTarget"
}

外部Gradle构建文件:
task build(){
    println project.target
}

如果我在getTarget()中放入一个闭包,println project.target将显示闭包而不是字符串。

如果我不关闭:
     // Problem here
    def getTarget(){
        return mExt.target
    }

然后我得到了“未初始化”而不是“myTarget”。

我如何在这里获取myext.target的值?

我正在使用gradle 2.3

最佳答案

试试这个:

定义类型为“MyExt”的名为“myext”的实例变量。

在“应用”方法中,执行以下操作:

myext = project.extensions.create('myext',MyExt)

在“getTarget”方法中,返回“myext.target”。

关于gradle - 如何使用GradleBuild任务在插件中正确使用gradle扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29172838/

相关文章:

android - RecyclerView 显示为灰色框,其名称位于中心。对于已实现的音频可视化器 View 也是如此

java - Gradle sourceCompatibility 对子项目没有影响

gradle - 仅在Gradle中的条件上执行task.dependsOn

java - Gradle(Android)-testCompile中缺少多项目依赖项

android - 错误 :"Configuration ' compile' 已过时并已替换为 'implementation' .", even though no ' compile' present in gradle

json - 如何在 Gradle 构建中验证 JSON

java - 怎么会找不到完整文件路径的文件呢?

Gradle Hello World 错误

gradle - 获取 gradle 模块的名称,以及它所依赖的任何其他模块的名称

Gradle XML 依赖报告错误