2

我有一个 gradle 多项目,其中我的 war 文件构建在一个子项目中,而我的集成测试在另一个子项目中。我已经读过 gretty 应该能够启动一个码头实例,让我在构建期间运行集成测试,但我无法弄清楚如何将 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'

根/web/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-test/build.gradle:

apply plugin: 'java'

task intTests << {
    println 'All integration testing is done in here'
}

当我运行“./gradlew -q intTests”时,输出如下:

所有的集成测试都在这里完成
2014-12-11 15:37:02.046 信息 - 记录已初始化 @1157ms
2014-12-11 15:37:02.554 信息 - jetty-9.2.3.v20140905
2014-12-11 15:37:02.682 警告 - ServletContainerInitializers:检测到。类层次结构:空
2014-12-11 15:37:03.114 信息 - 启动 oagJettyWebAppContext@7da22e4a{/,文件:/Users/fredrik/callista/dev/grettyfitnesse/web/build/inplaceWebapp/,可用}
2014-12-11 15:37:03.130 信息 - 已启动 ServerConnector@2590ae17{HTTP/1.1}{0.0.0.0:8080}
2014-12-11 15:37:03.130 信息 - 开始 @2245ms
2014-12-11 15:37:03.137 警告 - Jetty 9.2.3.v20140905 已启动并监听端口 8080
2014-12-11 15:37:03.158 警告 - 运行于:
2014-12-11 15:37:03.159 警告 - http://localhost:8080/
此任务将在正确的时间运行
2014-12-11 15:37:03.221 信息 - 停止 ServerConnector@2590ae17{HTTP/1.1}{0.0.0.0:8080}
2014-12-11 15:37:03.229 信息 - 停止 oagJettyWebAppContext@7da22e4a{/,文件:/Users/fredrik/callista/dev/grettyfitnesse/web/build/inplaceWebapp/,不可用}
2014-12-11 15:37:03.232 警告 - 码头 9.2.3.v20140905 已停止。
服务器停止。

因此,web 项目中的 intTests 任务将在正确的时刻运行,但 int-test 项目中的 intTests 任务将运行得早(在 web 服务器启动之前)。我该如何设置,以便 gretty 插件“连接”到我的 int-test 项目中定义的 intTests 任务?

我尝试过的事情: * 设置“integrationTestTask = ':int-test:intTests'”希望足以指定 gretty 应该在哪个子项目中寻找正确的任务。结果 - 码头甚至没有启动。* 在根 build.gradle 中创建 intTests 任务,尝试在 int-test 中扩展该任务。结果 - 没有区别。* 在 web 项目的 intTests 任务中添加了一个 dependsOn(":int-test:intTests")。结果 - 没有区别

4

1 回答 1

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 版本会检测到这个错误并导致构建失败。

于 2014-12-11T15:47:26.487 回答