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