Custom Gradle Plugin Exec task with extension does not use input properly
我正在关注Gradle文档的Writing Custom Plugins部分,特别是关于从构建中获取输入的部分。 文档提供的以下示例与预期完全一致:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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' } |
输出:
1 2 | > gradle -q hello Hi from Gradle |
我想让自定义插件执行外部命令(使用Exec任务),但是当将任务更改为某种类型(包括Exec以外的类型,如Copy)时,构建的输入将停止正常工作:
1 2 3 4 | // previous and following sections omitted for brevity project.task('hello', type: Exec) { println project.greeting.message } |
输出:
1 2 | > gradle -q hello Hello from GreetingPlugin |
有谁知道这个问题是什么?
它与任务的类型无关,这是典型的
当你写作
1 2 3 | project.task('hello') << { println project.greeting.message } |
并执行
配置阶段
执行阶段
在这种情况下,输出是来自Gradle的Hi
当你写作
1 2 3 | project.task('hello', type: Exec) { println project.greeting.message } |
并执行
配置阶段
其余的工作流程并不重要。
所以,小细节很重要。这是同一主题的解释。
解:
1 2 3 4 5 6 7 | void apply(Project project) { project.afterEvaluate { project.task('hello', type: Exec) { println project.greeting.message } } } |