plugins - gradle 从扩展中获取值(作为输入传递给任务)

标签 plugins gradle

我的插件中有以下代码:

    @Override
    void apply(Project project) {

        project.extensions.create(EXTENSION,TestExtension)

        project.task("task1") << {
            println "Task 1"
            println(project.mmm.test)
            def extension = project.extensions.findByName(EXTENSION)
            println(extension.test)
        }

        project.task("task2",type: TestTask) {
            println "Task 2 "
            def extension = project.extensions.findByName(EXTENSION)
//            conventionMapping.test = {extension.test}
//            println(project.extensions.findByName(EXTENSION).test)
//            test = "test"

        }
    }

在任务 1 中,extension.test 返回正确的值。然而在task2中extension.test总是返回null。我做错了什么?有没有更好的方法来传递一些扩展值作为任务的输入?我在 Mac 上使用 gradle 1.12 和 jdk 1.8。最好的问候

编辑:正确版本:

   project.task("task2", type: TestTask) {
        project.afterEvaluate {
            def extension = project.extensions.findByName(EXTENSION)
            println(project.extensions.findByName(EXTENSION).test)
            test = project.extensions.findByName(EXTENSION).test
        }
    }

最佳答案

task1打印执行时的值(注意 << ), task2在配置时(在评估apply plugin: ...之后构建脚本的其余部分之前)。这解释了为什么 println for task1 按预期工作,并且 println对于任务2则不然。

但是,在执行时配置任务已经太晚了。相反,插件需要推迟读取用户提供的值,直到配置阶段结束(在评估构建脚本之后,但在执行任何任务之前)。有几种技术可以做到这一点。更简单的方法之一是将任何此类读取访问包装为 project.afterEvaluate { ... } .

关于plugins - gradle 从扩展中获取值(作为输入传递给任务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23962154/

相关文章:

带有对象的 jQuery DataTables fnrender

eclipse - 如何为 Symfony 2 安装 Eclipse 插件?

android - 警告:API 'variant.getMergeResources()'已作废,并已替换为 'variant.getMergeResourcesProvider()'

android - 禁用即时运行时,Gradle 构建失败并显示 "Could not read path"

ruby-on-rails - 在 Rails 中,我应该安装为 gem 还是插件

javascript - jQuery getScript。如何在加载后执行函数

php - 如何在 php 中使用日期条件获取数据

android - 由于 ':app: lintVitalRelease',任务 `Could not find multidex-instrumentation.aar` 执行失败

java - 如何在 Intellij IDEA 社区版中为 gradle spring boot 项目设置 spring.config.location?

java - 无法将插件添加到Gradle构建文件中?