修改现有的 gradle 任务

aka*_*lou 7 java gradle build.gradle

apply plugin: 'java'在摇篮,它定义了其他任务processResources。我想在processResources. 我在我的中定义了以下复制任务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"                                                                                                                                                                                 
}   
Run Code Online (Sandbox Code Playgroud)

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

processResources << {
    // same code goes here
}
Run Code Online (Sandbox Code Playgroud)

或者

processResources {
    doLast {
        // same code goes here
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

我相信这是可能的,因为build任务本身定义了在执行期间运行多个任务的方式。还没有找到如何。

Opa*_*pal 6

processResources是(您可以在文档中查看)类型的简单任务Copy。因此,您可以按照与配置其他复制任务相同的方式对其进行配置。这足以过滤文件:

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

apply plugin: 'java'

processResources {
   filter(ReplaceTokens, tokens: ['token.to.replace': 'zombo.com'])
}
Run Code Online (Sandbox Code Playgroud)

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