当前位置: 首页 > 知识库问答 >
问题:

升级Groovy和Spock时,org.spockframework.runtime.SpockEngine无法获得公共no-arg构造函数

唐阳飇
2023-03-14

使用Gradle 7.1.1、Java 16、Groovy 3.0.8和Spock 2.0-Groovy3.0

Caused by: java.util.ServiceConfigurationError: org.junit.platform.engine.TestEngine: org.spockframework.runtime.SpockEngine Unable to get public no-arg constructor
    at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:582)
    at java.base/java.util.ServiceLoader.getConstructor(ServiceLoader.java:673)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1232)
    at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1264)
    at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1299)
    at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1383)
    at java.base/java.lang.Iterable.forEach(Iterable.java:74)
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:95)
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:75)
    at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:97)
    at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
    at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
    ... 25 more
Caused by: java.lang.NoClassDefFoundError: org/junit/platform/engine/support/discovery/SelectorResolver
    at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3305)
    at java.base/java.lang.Class.getConstructor0(Class.java:3510)
    at java.base/java.lang.Class.getConstructor(Class.java:2238)
    at java.base/java.util.ServiceLoader$1.run(ServiceLoader.java:660)
    at java.base/java.util.ServiceLoader$1.run(ServiceLoader.java:657)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:554)
    at java.base/java.util.ServiceLoader.getConstructor(ServiceLoader.java:668)
    ... 36 more
Caused by: java.lang.ClassNotFoundException: org.junit.platform.engine.support.discovery.SelectorResolver
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
    ... 44 more
dependencies {
    implementation 'io.rest-assured:rest-assured'
    implementation 'org.yaml:snakeyaml'
    implementation 'com.fasterxml.jackson.core:jackson-databind'
    testImplementation 'org.junit.jupiter:junit-jupiter'
    testImplementation('org.spockframework:spock-core') {
        transitive = false
    }
}
ext {
    jupiterVersion = '5.7.2'
}

jar.enabled = false

subprojects {
    apply plugin: 'java'
    apply plugin: 'groovy'
    apply plugin: 'codenarc'

    jar.enabled = true

    codenarc {
        toolVersion = '1.4'
        reportFormat = 'html'
        configFile = new File('../../tool/codenarc/groovy-ruleset.groovy')
    }

    dependencyManagement {
        imports {
            mavenBom("org.springframework.boot:spring-boot-dependencies:2.5.1") {
                bomProperties(['selenium.version'    : '3.141.59',
                               'rest-assured.version': '4.1.1'])
            }
        }
        dependencies {
            dependency 'org.codehaus.groovy.modules.http-builder:http-builder:0.7.1'
            dependency 'org.spockframework:spock-core:2.0-groovy-3.0'
            dependency 'com.athaydes:spock-reports:2.0-groovy-3.0'
            dependency 'com.codeborne:selenide:5.3.1'
            dependency 'org.hamcrest:hamcrest:2.1'
            dependencySet(group: 'org.junit.jupiter', version: jupiterVersion) {
                entry 'junit-jupiter'
                entry 'junit-jupiter-api'
            }
            dependencySet(group: 'org.slf4j', version: '1.7.28') {
                entry 'jcl-over-slf4j'
                entry 'jul-to-slf4j'
            }
            dependencySet(group: 'org.aspectj', version: '1.9.4') {
                entry 'aspectjrt'
                entry 'aspectjweaver'
            }
            dependency 'io.rest-assured:rest-assured:4.1.1'
            dependency 'org.postgresql:postgresql:42.2.8'
            dependency 'org.yaml:snakeyaml:1.25'
            dependency 'org.apache.poi:poi-ooxml:4.1.1'
            dependency 'com.opencsv:opencsv:4.0'
            dependency 'org.junit.platform:junit-platform-launcher:1.4.0'
        }
    }

    test {
        useJUnitPlatform()
    }
}

如有任何帮助,不胜感激。

ps.这适用于Java11、Groovy2.5和Spock1.3-Groovy-2.5

共有1个答案

孙凌龙
2023-03-14

是否添加了usejunitPlatform()

https://github.com/spockframework/spock-example/blob/master/build.gradle#L34

test {
  useJUnitPlatform()
}
 类似资料:
  • 最近,我将Paho MQTT Spy项目导入Eclipse。导入结束时出现错误: 为什么我会收到这条信息,这意味着什么?怎么修? 我正在使用Java13.0.1 我试图用maven构建项目,得到了同样的错误。 我添加了下面的依赖项到pom.xml 现在pom.xml如下所示: Maven给出了错误: UPD Java8解决了问题,但我仍然试图使java 13与它一起工作。 正在尝试使用下面定义的p

  • 问题内容: Oracle Java教程站点的这一段使我感到困惑: 所有类都有至少一个构造函数。如果一个类未显式声明任何类,则Java编译器会自动提供一个无参数的构造函数,称为默认构造函数。此默认构造函数调用类父级的无参数构造函数,如果该类没有其他父级,则调用Object构造函数。如果父级没有构造函数(对象确实有一个构造函数),则编译器将拒绝该程序。 如果所有对象都直接或间接继承自Object,那么

  • 问题内容: 如果您尝试封送引用了没有no-arg构造函数的复杂类型的类,例如: 与Java一起的JAXB实现,如下所示: JAXB会抛出一个 现在,我了解了为什么JAXB在解组时需要no-arg构造函数-因为它需要实例化该对象。但是为什么JAXB在编组时需要no-arg构造函数? 另外,还有一个问题,为什么Java的JAXB实现会在字段为null时抛出异常,并且无论如何都不会将其编组? 我是否缺少

  • 问题内容: 我的一项作业需要一个银行帐户才能从支票和储蓄帐户转帐资金。交易存储在ArrayList中,并设置为用户指定何时转移资金。用于支票和储蓄的银行帐户类可以正常工作,但是我创建的TransferService类在NetBeans中不能正确编译。 这些提示似乎无法解决错误。我得到错误: 事务是抽象的,无法实例化。 我该如何解决这个问题? 问题答案: 构造函数没有返回类型。所以不 反而 关于,

  • 我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这