繁体   English   中英

修改现有的gradle任务

[英]Modify an existing gradle task

在Gradle中apply plugin: 'java'时,它定义了其他任务processResources 我想在processResources期间替换其中一个资源文件中的token /参数。 我在build.gradle定义了以下复制任务:

import org.apache.tools.ant.filters.ReplaceTokens                                                                                                                                                                                         

task initConfig(type: Copy) {                                                                                                                                                                                                             
    from("src/resources/assets/js") {                                                                                                                                                                                                     
        include 'config.js'                                                                                                                                                                                                               
        filter(ReplaceTokens, tokens: [host: "${System.env.HOST ?: 'localhost:58080'}" as String])                                                                                                                                        
    }                                                                                                                                                                                                                                     
    into "$sourceSets.main.output.resourcesDir/assets/js"                                                                                                                                                                                 
}   

如果我运行gradle -q run initConfig它工作正常。 我想要的是这个任务作为processResources任务的一部分运行,我试图将相同的逻辑如下:

processResources << {
    // same code goes here
}

要么

processResources {
    doLast {
        // same code goes here
    }
}

它们都不起作用。 因此,如果运行gradle -q clean processResources资源被复制,但令牌不会被替换。

我不想在运行构建时强制显式运行/添加initConfig ,所以理想情况下gradle -q build应该做所有必要的事情。

我相信这是可能的,因为build任务本身定义了在执行期间运行多个任务的方式。 找不到怎么样。

processResources是(你可以在文档中查看)一个类型为Copy的普通任务。 因此,您可以使用与配置其他复制任务相同的方式对其进行完全配置。 这足以过滤文件:

import org.apache.tools.ant.filters.ReplaceTokens 

apply plugin: 'java'

processResources {
   filter(ReplaceTokens, tokens: ['token.to.replace': 'zombo.com'])
}

在这里您可以找到一个简单的演示。

ProcessResources是java-plugin提供的任务,你不需要添加<<来修改它的行为。 只需尝试:

processResources{
  //same Code goes here
}

另一种解决方法可能是在processResources和initConfig之间添加一个依赖关系,如下所示:

processResources{
  dependsOn initConfig
}

这将在processResources之前执行initConfig。

希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM