如何配置Gradle在运行' gradle test'时不运行其他任务

时间:2015-10-23 15:24:49

标签: java gradle build.gradle

我有一个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假装它拥有一切。

1 个答案:

答案 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