Spring boot 从jar运行Spock Spring启动测试

Spring boot 从jar运行Spock Spring启动测试,spring-boot,groovy,jar,spock,Spring Boot,Groovy,Jar,Spock,我正在尝试用gradle构建一个jar,它允许我运行springboot的Spock测试。我已经为此挣扎了两天,没有任何效果。这就是我目前拥有的: 我的主类放入test/groovy/main.groovy: class Main { static void main(String[] args) { def embeddedSpecRunner = new EmbeddedSpecRunner() embeddedSpecRunner.runClass(

我正在尝试用gradle构建一个jar,它允许我运行springboot的Spock测试。我已经为此挣扎了两天,没有任何效果。这就是我目前拥有的:

我的主类放入
test/groovy/main.groovy

class Main {
    static void main(String[] args) {
        def embeddedSpecRunner = new EmbeddedSpecRunner()
        embeddedSpecRunner.runClass(SampleScenario)
    }
}
@SpringBootTest(classes = SpringBootGroovyApplication.class)
class MyScenario extends Specification {

    def "test"() {
        when:
        def result = 1 + 1

        then:
        result == 2
    }
}
test/groovy/SampleScenario.groovy

class Main {
    static void main(String[] args) {
        def embeddedSpecRunner = new EmbeddedSpecRunner()
        embeddedSpecRunner.runClass(SampleScenario)
    }
}
@SpringBootTest(classes = SpringBootGroovyApplication.class)
class MyScenario extends Specification {

    def "test"() {
        when:
        def result = 1 + 1

        then:
        result == 2
    }
}
src/main/groovy/springbootgroovyaapplication

@SpringBootApplication
class SpringBootGroovyApplication {
    static void main(String[] args) {
        SpringApplication.run SpringBootGroovyApplication, args
    }
}
build.gradle

plugins {
    id 'org.springframework.boot' version '2.3.5.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'groovy'
}

version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    implementation 'org.springframework.boot:spring-boot-configuration-processor'

    compile group: 'org.spockframework', name: 'spock-core', version: '1.3-groovy-2.5'
    compile group: 'org.spockframework', name: 'spock-spring', version: '1.3-groovy-2.5'
    testCompile group: 'com.athaydes', name: 'spock-reports', version: '1.7.1'
}

bootJar {
    mainClassName = 'Main'
    from sourceSets.test.output.classesDirs
}
然后我运行
/gradlew bootJar
,以构建jar。然后我运行我的jar并得到异常:

Exception in thread "main" java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:576)
        at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:398)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:107)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: java.lang.ClassNotFoundException: groovy.lang.GroovyObject
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 17 more
我不知道出了什么问题-我解压缩了jar,groovy依赖项就在那里。。。提前感谢您的帮助