【问题标题】:Gradle: Can't pass argument to class in pluginGradle:无法将参数传递给插件中的类
【发布时间】:2017-09-23 16:04:10
【问题描述】:

我按照example in 进行了尝试,并将其简化为“消息”。

class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        def extension = project.extensions.create('greeting', GreetingPluginExtension, project)
        project.tasks.create('hello', Greeting) {
            message = extension.message
        }
    }
}

class GreetingPluginExtension {
    def String message = "aa"

    GreetingPluginExtension(Project project) {
        message = project.property(String)
    }

}

class Greeting extends DefaultTask {
    @Input
    def String message = project.property(String)

    @TaskAction
    def testCoverageVerification() {
        logger.quiet("Message is")
        logger.quiet(message)
    }
}

apply plugin: GreetingPlugin

greeting {
    message = 'Hi from Gradle'
}

当我运行./gradlew -q hello 时,我得到了

Message is
value: null

我希望它是

Message is
value: Hi from Gradle

为什么我的问候语中的字符串无法传入?

【问题讨论】:

    标签: android gradle android-gradle-plugin build.gradle


    【解决方案1】:

    实际上,这很容易解释。 扩展块被评估之前应用和评估插件(因此是任务创建和变量值分配)。因此,甚至在设置扩展值之前就创建了任务。从您提供的链接:

    构建脚本中的扩展声明以及映射 扩展属性和自定义任务属性之间发生在 Gradle 的构建生命周期的配置阶段。避免 评估顺序问题,映射属性的实际值必须 在执行阶段解决。

    要使其正常工作,您可以将插件声明更改为:

    class GreetingPlugin implements Plugin<Project> {
        void apply(Project project) {
            def extension = project.extensions.create('greeting', GreetingPluginExtension, project)
            project.tasks.create('hello', Greeting) {
                doFirst {
                  message = extension.message
                }
            }
        }
    }
    

    但是它没有多大意义 - 所以不要使用它;)

    【讨论】:

      【解决方案2】:

      我设法通过直接从project.greeting.message 获取问题来解决我的问题

      @TaskAction
      def testCoverageVerification() {
          message = project.greeting.message
          logger.quiet("Message is")
          logger.quiet(message)
      }
      

      【讨论】:

        猜你喜欢
        • 2016-02-10
        • 1970-01-01
        • 1970-01-01
        • 2015-11-11
        • 2020-05-15
        • 2015-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多