修改现有的gradle任务

时间:2015-10-01 23:48:21

标签: java gradle build.gradle

在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任务本身定义了在执行期间运行多个任务的方式。找不到如何。

2 个答案:

答案 0 :(得分:2)

vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php是(您可以在docs中查看)processResources类型的简单任务。因此,您可以使用与配置其他复制任务相同的方式对其进行完全配置。这足以过滤文件:

Copy

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

答案 1 :(得分:1)

ProcessResources是java-plugin提供的任务,您不需要添加&lt;&lt;用于修改它的行为。 只需尝试:

processResources{
  //same Code goes here
}

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

processResources{
  dependsOn initConfig
}

这将在processResources之前执行initConfig。

希望得到这个帮助。