You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建并运行Spock Groovy脚本可执行Jar包的问题排查

问题分析与解决方案

首先你犯了一个基础错误:把生成的Jar文件路径当成Gradle任务名来执行了,Gradle命令行参数只能是任务名称,不能直接写文件路径。下面是正确的构建和运行步骤:

一、正确构建可执行Shadow Jar

Shadow插件提供的Uber-Jar构建任务是shadowJar,不是默认的jar任务(默认jar只打包当前模块的编译代码,不包含依赖)。

构建命令

  • 在项目根目录执行:
    ./gradlew :common-config-qa:shadowJar
    
    (:common-config-qa:是模块路径,指定Gradle执行该模块的shadowJar任务)
  • 或者进入common-config-qa模块目录执行:
    ./gradlew shadowJar
    

二、调整Shadow Jar配置以支持测试执行

你当前的配置有问题:mainClass设置为CommonSpockSpec是错误的,Spock测试类不能直接作为可执行Jar的主类,需要用Spock官方提供的运行器类来触发测试执行。

修改common-config-qa/build.gradle.kts配置如下:

plugins {
    id("groovy")
    id("java")
    id("com.github.johnrengelman.shadow") version "7.1.2"
}

dependencies {
    // 确保引入Spock及相关测试依赖(根据你的实际版本调整)
    testImplementation("org.spockframework:spock-core:2.3-groovy-4.0")
    testImplementation("org.codehaus.groovy:groovy-all:4.0.11")
    // 你的其他依赖(比如Java工具类的依赖)
}

tasks.shadowJar {
    // 打包测试代码和测试运行时依赖
    from(sourceSets.test.get().output)
    configurations = listOf(project.configurations.testRuntimeClasspath.get())
    
    // 设置主类为Spock的官方运行器
    manifest {
        attributes(mapOf(
            "Main-Class" to "org.spockframework.runner.SpockMain",
            "Implementation-Title" to project.name,
            "Implementation-Version" to project.version
        ))
    }
}

这个配置会把模块内的测试代码、Java工具类,以及所有测试运行所需的依赖(包括Spock、Groovy等)全部打包进Uber-Jar。

三、运行可执行Jar

构建完成后,Jar文件会生成在common-config-qa/build/libs/目录下(命名格式一般为[模块名]-[版本号]-all.jar)。

运行命令

  • 在项目根目录执行:
    java -jar common-config-qa/build/libs/common-config-qa-0.1-all.jar
    
  • 或者进入common-config-qa模块目录执行:
    java -jar build/libs/common-config-qa-0.1-all.jar
    

运行指定测试类

如果只想运行特定的测试类,在命令后加上类的全限定名即可:

java -jar common-config-qa/build/libs/common-config-qa-0.1-all.jar com.test.qa.CommonSpockSpec

四、扩展:包含app-spock-tests模块的测试

如果需要打包并运行app-spock-tests模块的测试,只需:

  1. 在app-spock-tests/build.gradle.kts中添加相同的Shadow插件配置(调整主类为SpockMain,打包测试代码和依赖)
  2. 确保app-spock-tests模块依赖common-config-qa:
    dependencies {
        testImplementation(project(":common-config-qa"))
    }
    
  3. 构建命令改为./gradlew :app-spock-tests:shadowJar,运行对应的Jar即可。

内容的提问来源于stack exchange,提问作者user3379502

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:54:38