【问题标题】:Custom Gradle Plugin Exec task with extension does not use input properly具有扩展名的自定义 Gradle Plugin Exec 任务未正确使用输入
【发布时间】:2016-10-26 12:51:52
【问题描述】:

我正在关注 Gradle 文档的 Writing Custom Plugins 部分,特别是关于 Getting input from the build 的部分。文档提供的以下示例完全符合预期:

apply plugin: GreetingPlugin

greeting.message = 'Hi from Gradle'

class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        // Add the 'greeting' extension object
        project.extensions.create("greeting", GreetingPluginExtension)
        // Add a task that uses the configuration
        project.task('hello') << {
            println project.greeting.message
        }
    }
}

class GreetingPluginExtension {
    def String message = 'Hello from GreetingPlugin'
}

输出:

> gradle -q hello
Hi from Gradle

我想让自定义插件执行一个外部命令(使用Exec task),但是当将任务更改为一个类型(包括 Exec 以外的类型,例如Copy)时,构建的输入停止正常工作:

// previous and following sections omitted for brevity
project.task('hello', type: Exec) {
    println project.greeting.message
}

输出:

> gradle -q hello
Hello from GreetingPlugin

有人知道问题出在哪里吗?

【问题讨论】:

    标签: gradle gradle-plugin


    【解决方案1】:

    与任务类型无关,是典型的&lt;&lt;误解。

    当你写作时

    project.task('hello') << {
        println project.greeting.message
    }
    

    并执行gradle hello,会发生以下情况:

    配置阶段

    1. 应用自定义插件
    2. 创建任务你好
    3. 设置 greeting.message = 'Hi from Gradle'

    执行阶段

    1. 以空体运行任务
    2. 执行println project.greeting.message}

    在这个场景中输出是来自 Gradle 的 Hi

    当你写作时

    project.task('hello', type: Exec) {
        println project.greeting.message
    }
    

    并执行gradle hello,会发生以下情况

    配置阶段

    1. 应用自定义插件
    2. 创建执行任务你好
    3. 执行任务初始化关闭println project.greeting.message
    4. set greeting.message = 'Hi from Gradle' (太晚了,在第 3 步打印出来了)

    工作流程的其余部分无关紧要。


    所以,小细节很重要。 Here's同主题的解释。

    解决方案:

    void apply(Project project) {
        project.afterEvaluate {
            project.task('hello', type: Exec) {
                println project.greeting.message
            }
        }
    }
    

    【讨论】:

    • 感谢您的回答。这只解释了为什么会出现问题。您知道实现预期结果的解决方案或替代方案吗?
    • 嗯,我确实想解决这个问题......就像大多数人在这个网站上提问一样。 :) 感谢您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多