java - 修改现有的 gradle 任务

标签 java gradle build.gradle

apply plugin: 'java' 在 Gradle 中时,它在其他任务中定义了 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 资源被复制,但 token 没有被替换。

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

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

最佳答案

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

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

apply plugin: 'java'

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

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

关于java - 修改现有的 gradle 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898508/

相关文章:

java - 在 Linux 上将 Java 应用程序作为服务运行

java - java中的网页抓取和数据处理

gradle - 嵌套的gradle构建

java - Linux 的 Gradle/Java 启动脚本不可执行

java - 尝试使用 api 包装器时 gradle 出现 NoClassDeffFound 错误

java - 无法让此类在客户端代码上的 java 中工作 - 没有编译错误,但运行时错误

linux - Gradles 的 zipTree 在 Unix 和 Windows 上的不同行为?

spring-boot - Spring-Boot入门测试导入未解决

gradle - Gradle-如何覆盖在EAR中创建lib目录

java - 退役 jar 的替代解决方案