如何使用Gradle针对运行中的应用执行QuarkusIntTest?
解决Quarkus Gradle集成测试连接运行中应用失败的问题
针对运行中的Quarkus应用执行集成测试时,Maven与Gradle的参数传递和任务配置存在细节差异,以下是修复Gradle命令执行失败的方案:
1. 确保命令行参数正确传递给测试JVM
Gradle默认不会将-D开头的系统属性传递给测试任务的JVM进程,需通过以下两种方式处理:
方式A:使用--system-prop参数直接传递
执行命令时改用--system-prop(缩写-D也可,但需配合任务配置):
./gradlew quarkusIntTest --system-prop quarkus.http.test-host=1.2.3.4 --system-prop quarkus.http.test-port=4321
方式B:配置Gradle任务传递系统属性
在build.gradle(或build.gradle.kts)中添加全局测试任务配置,让所有测试任务继承系统属性:
// Groovy DSL tasks.withType(Test) { systemProperties System.properties }
// Kotlin DSL tasks.withType<Test> { systemProperties(System.getProperties().mapKeys { it.key.toString() }) }
配置完成后,即可使用原命令执行:
./gradlew quarkusIntTest -Dquarkus.http.test-host=1.2.3.4 -Dquarkus.http.test-port=4321
2. 显式配置quarkusIntTest任务属性
如果上述方法仍不生效,可直接在build.gradle中为quarkusIntTest任务指定测试主机和端口的系统属性,支持命令行动态覆盖:
// Groovy DSL quarkusIntTest { systemProperty 'quarkus.http.test-host', System.getProperty('quarkus.http.test-host', 'localhost') systemProperty 'quarkus.http.test-port', System.getProperty('quarkus.http.test-port', '8081') }
// Kotlin DSL tasks.quarkusIntTest { systemProperty("quarkus.http.test-host", System.getProperty("quarkus.http.test-host", "localhost")) systemProperty("quarkus.http.test-port", System.getProperty("quarkus.http.test-port", "8081")) }
3. 额外检查项
- 确认测试类使用了
@QuarkusIntegrationTest注解,该注解用于标记针对运行中应用的集成测试 - 验证目标应用确实在
1.2.3.4:4321正常运行,无防火墙拦截、端口占用等问题 - 确保Quarkus Gradle插件版本为最新稳定版,旧版本可能存在属性兼容问题
内容的提问来源于stack exchange,提问作者Guilherme Torres Castro
相关产品推荐
相关产品推荐

