修改现有 gradle 任务

Modify an existing gradle task

apply plugin: 'java'在Gradle时,它定义了其他任务processResources。 我想在 processResources 期间替换其中一个资源文件中的 token/parameter。 我在 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
    }
}

None 其中有效。所以,如果 运行 gradle -q clean processResources 资源被复制,但令牌没有被替换。

我不想在 运行 构建时明确地强制 run/add initConfig,所以理想情况下 gradle -q build 应该做所有必要的事情。

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

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

processResources{
  //same Code goes here
}

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

processResources{
  dependsOn initConfig
}

这将在 processResources 之前执行 initConfig。

希望对您有所帮助。

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

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

apply plugin: 'java'

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

Here你可以找到一个简单的演示。