我有一个build.gradle文件,其中包含以下任务,以及Java插件,Appengine插件和Jetty插件:
task(copyTestDeps, type: Copy) {
from configurations.testRuntime - configurations.runtime
into 'test-lib'
def deps = configurations.testRuntime - configurations.runtime
println '\nAdd these to your classpath from the \'test-lib\' folder: \n'
deps.each { println "test-lib/" + it.getName() }
println '\n'
}
当我运行gradle test
时,运行测试并编译所有代码,但上面定义的此任务也会运行。
我不希望该任务运行,至少不是在开始时,而是在结束时,但是我很难看到如何告诉gradle测试只是简单地不执行此任务,因为我可能会结束编写其他我不想让gradle测试运行的任务。
我查看了Java插件的文档,但是我没有看到任何可以有效禁用此行为的内容。
除非我从终端显式运行gradle copyTestDeps
,否则如何配置gradle以便此copyTestDeps任务不会运行?我假设有记录的" doLast"方法可以正常运行,所以让我们专注于阻止gradle test
假装它拥有一切。
答案 0 :(得分:0)
您正在混合配置和执行阶段。您的任务似乎正在运行,但只执行了print语句;没有文件会被复制。如果删除目录test-lib
并对Gradle执行任何操作(例如./gradlew tasks
),您将看到正在打印的指令(位于Gradle输出的顶部),但目录test-lib
将不存在之后。
将您的任务定义更改为:
task copyTestDeps(type: Copy) {
// Configure how the copy task must behave during execution
from configurations.testRuntime - configurations.runtime
into 'test-lib'
// Run the custom code during execution
doLast {
def deps = configurations.testRuntime - configurations.runtime
println '\nAdd these to your classpath from the \'test-lib\' folder: \n'
deps.each { println "test-lib/" + it.getName() }
println '\n'
}
}
请参阅:https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:build_phases