Serenity BDD Maven REST测试报org.codehaus.groovy.vmplugin.v7.Java7初始化错误
问题根因
这个java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7报错是版本兼容性问题导致:你使用的2.0.81版本Serenity BDD依赖的Groovy版本较低,无法兼容你本地运行的JDK11及以上高版本Java环境。
解决方案
- 方案1:切换项目的编译运行环境为JDK8
这是适配Serenity 2.x版本最稳妥的方案,不需要修改任何pom依赖配置,仅需将项目的JDK版本切换为1.8即可解决报错。 - 方案2:升级Serenity BDD版本
若需保留高版本JDK环境,可将pom.properties中所有Serenity相关版本统一升级到3.2.0及以上的稳定版本,示例配置:
升级后刷新Maven依赖即可,新版本Serenity内置的Groovy已经完成高版本JDK适配。<properties> <serenity.version>3.9.8</serenity.version> <serenity.maven.version>3.9.8</serenity.maven.version> <serenity.restassured.version>3.9.8</serenity.restassured.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <encoding>UTF-8</encoding> </properties> - 方案3:手动引入兼容高版本JDK的Groovy依赖
若暂时不想升级Serenity版本也不想降低JDK版本,可在pom的dependencies节点中手动加入高版本Groovy依赖,覆盖Serenity传递的旧版本Groovy:<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.5.14</version> <type>pom</type> </dependency>
额外优化提示
你的测试代码中的init()方法未添加@BeforeClass注解,测试运行时不会自动执行,配置的baseURI和basePath不会生效,需修改代码如下:
import org.junit.BeforeClass; // 新增导入 @RunWith(SerenityRunner.class) public class FirstRestTest { @BeforeClass // 新增注解 public static void init() { RestAssured.baseURI = "http://localhost:8080"; RestAssured.basePath = "/api/users/"; } // 其余代码保持不变 }
内容的提问来源于stack exchange,提问作者GreenTree
相关产品推荐
相关产品推荐

