测试后Gradle任务未运行

时间:2017-11-09 03:35:05

标签: java gradle build.gradle

我在build.gradle文件中设置了集成测试:

task integrationSetup(dependsOn: jar, type: Exec) {
    workingDir "$projectDir/resources/integration"
    commandLine 'sh', './start_service.sh'
}

task testIntegration(dependsOn: integrationSetup, type: Test) {
    testClassesDirs = sourceSets.testIntegration.output.classesDirs
    classpath = sourceSets.testIntegration.runtimeClasspath
    ignoreFailures = true
}

task integrationTearDown(dependsOn: testIntegration, type: Exec) {
    workingDir "$projectDir/resources/integration"
    commandLine 'sh', './stop_service.sh'
}

testIntegration.mustRunAfter integrationSetup
testIntegration.finalizedBy integrationTearDown
integrationTearDown.mustRunAfter testIntegration

但是,由于将Gradle Wrapper升级到版本4+,任务不再正确执行。最后的拆除从未运行,服务仍在继续。版本3和版本4之间发生了哪些变化以更改此行为。令人沮丧的Gradle在没有警告或弃用通知的情况下做到了这一点。

一个愚蠢的选择是降级Gradle包装器版本(可以确认此设置仍适用于3.1)。但这不应该是IMO所必需的。

更新:每个用户@Opal进行了一些更改。但是仍有问题,如果在集成测试期间发生任何错误,最终拆除不会运行。

> Task :compileTestIntegrationJava
Putting task artifact state for task ':compileTestIntegrationJava' into context took 0.0 secs.
file or directory '/home/project/cleaner/src/testIntegration/java', not found
file or directory '/home/project/cleaner/src/testIntegration/java', not found
Executing task ':compileTestIntegrationJava' (up-to-date check took 0.072 secs) due to:
  Output property 'destinationDir' file /home/project/cleaner/build/classes/java/testIntegration has changed.
  Output property 'destinationDir' file /home/project/cleaner/build/classes/java/testIntegration/com has been removed.
  Output property 'destinationDir' file /home/project/cleaner/build/classes/java/testIntegration/com/project has been removed.
All input files are considered out-of-date for incremental task ':compileTestIntegrationJava'.
file or directory '/home/project/cleaner/src/testIntegration/java', not found
Compiling with JDK Java compiler API.
/home/project/cleaner/src/integration/java/com/project/cleaner/CleansRequestsTests.java:415: error: reached end of file while parsing
}
 ^
1 error

:compileTestIntegrationJava (Thread[Daemon worker Thread 8,5,main]) completed. Took 0.162 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileTestIntegrationJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.

BUILD FAILED in 8s
8 actionable tasks: 8 executed
Stopped 0 worker daemon(s).

1 个答案:

答案 0 :(得分:1)

在讨论中,结果发现OP想要在运行测试之前停止服务,无论例如编译错误。可以使用以下脚本完成:

ext.integrationTearDown = { 
  workingDir "$projectDir/resources/integration" 
  commandLine 'sh', './stop_service.sh' 
} 

task(type: Exec, 'stop_service', integrationTearDown) 

gradle.buildFinished { 
  exec integrationTearDown 
} 

testIntegration.dependsOn integrationSetup 
testIntegration.finalizedBy stop_service

使用这段代码,服务将在每次构建后停止 - 如果成功,则停止活动。为避免此行为BuildResult传递给buildFinished,可用于确定所需行为。