我有一个gradle multi项目,我的war文件是在一个子项目中构建的,我的集成测试在不同的子项目中。我已经读过gretty应该能够启动一个jetty实例让我在构建期间运行集成测试,但我无法弄清楚如何将gretty integrationTestTask任务“连接”到我的其他子项目中的任务,从那里进行实际测试将会运行。
我的项目结构如下:
root/
int-test/
build.gradle
web/
build.gradle
build.gradle
settings.gradle
根/ settings.gradle:
include ':web'
include ':int-test'
根/的build.gradle:
apply plugin: 'java'
根/网络/的build.gradle:
apply plugin: 'war'
apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'
gretty {
contextPath = '/'
integrationTestTask = 'intTests'
}
task intTests << {
println 'This task will run in just the right time'
}
根/ INT-测试/的build.gradle:
apply plugin: 'java'
task intTests << {
println 'All integration testing is done in here'
}
当我运行“./gradlew -q intTests”时,这是输出:
All integration testing is done in here 2014-12-11 15:37:02.046 INFO - Logging initialized @1157ms 2014-12-11 15:37:02.554 INFO - jetty-9.2.3.v20140905 2014-12-11 15:37:02.682 WARN - ServletContainerInitializers: detected. Class hierarchy: empty 2014-12-11 15:37:03.114 INFO - Started o.a.g.JettyWebAppContext@7da22e4a{/,file:/Users/fredrik/callista/dev/grettyfitnesse/web/build/inplaceWebapp/,AVAILABLE} 2014-12-11 15:37:03.130 INFO - Started ServerConnector@2590ae17{HTTP/1.1}{0.0.0.0:8080} 2014-12-11 15:37:03.130 INFO - Started @2245ms 2014-12-11 15:37:03.137 WARN - Jetty 9.2.3.v20140905 started and listening on port 8080 2014-12-11 15:37:03.158 WARN - runs at: 2014-12-11 15:37:03.159 WARN - http://localhost:8080/ This task will run in just the right time 2014-12-11 15:37:03.221 INFO - Stopped ServerConnector@2590ae17{HTTP/1.1}{0.0.0.0:8080} 2014-12-11 15:37:03.229 INFO - Stopped o.a.g.JettyWebAppContext@7da22e4a{/,file:/Users/fredrik/callista/dev/grettyfitnesse/web/build/inplaceWebapp/,UNAVAILABLE} 2014-12-11 15:37:03.232 WARN - Jetty 9.2.3.v20140905 stopped. Server stopped.
因此,Web项目中的intTests任务将在正确的时刻运行,但int-test项目中的intTests任务将运行到早期(在Web服务器启动之前)。 如何设置它以便gretty插件“连接”到我的int-test项目中定义的intTests任务?
我尝试过的事情: *设置“integrationTestTask =':int-test:intTests'”希望指定gretty应该在哪个子项目中寻找正确的任务就足够了。结果 - 码头甚至没有启动。 *在root build.gradle中创建intTests任务,尝试在int-test中扩展该任务。结果 - 没有区别。 *在web项目的intTests任务中添加了dependsOn(“:int-test:intTests”)。结果 - 没有区别
答案 0 :(得分:0)
首先,检查gretty.integrationTestTask = ":int-test:intTests"
是否有效。如果没有,请将以下内容添加到int-tests/build.gradle
:
intTests {
dependsOn(":web:taskThatStartsTheWebServer")
finalizedBy(":web:taskThatStopsTheWebServer")
}
(您可以在Gretty文档或gradle tasks
的输出中找到任务名称。)
请注意,它是task foo { dependsOn "bar" }
,而不是task foo << { dependsOn "bar" }
。最近的Gradle版本将检测到此错误并使构建失败。