如何为Gradle指定测试套件创建类似assembleDist的分发打包任务?
我有一个基础Java应用,已经通过Gradle的testing{suites{...}} DSL定义了一个专属的集成测试套件。现在想把这个测试套件打包成独立的自包含程序,以org.junit.platform.console.ConsoleLauncher作为主类,只需要JRE就能运行。
我知道Gradle的application插件可以方便地把src/main的代码和依赖打包成包含bin和libs文件夹的tar/zip归档包,对应的任务有distTar、distZip和assembleDist。请问该如何创建自定义的distSpecificTestSuiteTar和distSpecificTestSuiteZip任务,只打包目标测试套件及其依赖,生成独立的自包含分发包?
解决方案
1. 定义测试套件的分发配置
在build.gradle中利用Gradle的Distribution类型,为目标测试套件配置专属的分发内容,包含测试编译产物、依赖库和启动脚本:
// 假设你的测试套件名称是integrationTest def integrationTestSuite = testing.suites.named('integrationTest', JvmTestSuite) // 创建自定义分发配置 distributions { integrationTest { baseName = 'integration-test-suite' contents { // 加入测试编译后的class文件 from integrationTestSuite.map { it.targetClassesDirectory } // 加入测试运行时依赖库 from configurations[integrationTestSuite.map { it.runtimeClasspathConfigurationName }] // 生成跨平台的启动脚本 into('bin') { from createStartScripts { mainClass = 'org.junit.platform.console.ConsoleLauncher' classpath = configurations[integrationTestSuite.map { it.runtimeClasspathConfigurationName }] + integrationTestSuite.map { it.targetClassesDirectory } applicationName = 'run-integration-test' } } } } }
2. 注册自定义的tar/zip任务
Gradle会自动为上述自定义分发生成integrationTestDistTar和integrationTestDistZip任务。如果需要指定自定义任务名称,可以手动注册:
// 自定义tar包任务 tasks.register('distSpecificTestSuiteTar', Tar) { dependsOn integrationTestSuite.map { it.testClassesTask } from distributions.integrationTest.contents archiveBaseName.set('specific-test-suite') archiveExtension.set('tar') compression = Compression.GZIP } // 自定义zip包任务 tasks.register('distSpecificTestSuiteZip', Zip) { dependsOn integrationTestSuite.map { it.testClassesTask } from distributions.integrationTest.contents archiveBaseName.set('specific-test-suite') archiveExtension.set('zip') }
3. 预设启动参数(可选)
如果需要在启动脚本中固定JUnit Console Launcher的参数(比如指定测试类、输出报告路径),可以修改createStartScripts的配置:
createStartScripts { mainClass = 'org.junit.platform.console.ConsoleLauncher' defaultJvmOpts = ['--select-class', 'com.example.MyIntegrationTest', '--reports-dir', './test-reports'] }
4. 生成分发包
执行以下命令即可生成自包含的测试套件包:
# 生成tar.gz包 ./gradlew distSpecificTestSuiteTar # 生成zip包 ./gradlew distSpecificTestSuiteZip
生成的包会存放在build/distributions目录下,解压后可通过bin/run-integration-test(Linux/macOS)或bin/run-integration-test.bat(Windows)直接运行,仅需JRE环境即可执行测试。
内容的提问来源于stack exchange,提问作者Kirill

