Quarkus单元测试执行报错:缺失类依赖问题求解决
解决Quarkus单元测试启动时的ClassNotFoundException问题
问题场景
测试代码如下:
@QuarkusTest class AccountResourceTest { @BeforeEach void setUp() { } @Test void getUserProfile() { assertEquals("UserTest", "UserTest"); } }
执行测试时抛出以下错误:
java.lang.RuntimeException: io.quarkus.bootstrap.BootstrapException: Failed to create the application model for backend-account::jar:2024.3.1-SNAPSHOTnull at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:642) at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:726) at java.base/java.util.Optional.orElseGet(Optional.java:364) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) Caused by: io.quarkus.bootstrap.BootstrapException: Failed to create the application model for backend-account::jar:2024.3.1-SNAPSHOTnull at io.quarkus.bootstrap.BootstrapAppModelFactory.resolveAppModel(BootstrapAppModelFactory.java:308) at io.quarkus.bootstrap.app.QuarkusBootstrap.bootstrap(QuarkusBootstrap.java:133) at io.quarkus.test.junit.AbstractJvmQuarkusTestExtension.createAugmentor(AbstractJvmQuarkusTestExtension.java:190) at io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:218) at io.quarkus.test.junit.QuarkusTestExtension.ensureStarted(QuarkusTestExtension.java:609) at io.quarkus.test.junit.QuarkusTestExtension.beforeAll(QuarkusTestExtension.java:659) ... 1 more Caused by: java.lang.RuntimeException: Failed to create application model resolver for backend-account at io.quarkus.bootstrap.BootstrapAppModelFactory.getAppModelResolver(BootstrapAppModelFactory.java:165) at io.quarkus.bootstrap.BootstrapAppModelFactory.resolveAppModel(BootstrapAppModelFactory.java:293) ... 6 more Caused by: java.lang.RuntimeException: Cannot get declared constructors from class org.apache.maven.profiles.activation.FileProfileActivator at io.smallrye.beanbag.sisu.Sisu.findConstructor(Sisu.java:874) at io.smallrye.beanbag.sisu.Sisu.addBeanFromXml(Sisu.java:453) at io.smallrye.beanbag.sisu.Sisu.addClassLoader(Sisu.java:124) at io.smallrye.beanbag.maven.MavenFactory.<init>(MavenFactory.java:71) at io.smallrye.beanbag.maven.MavenFactory.create(MavenFactory.java:96) at io.smallrye.beanbag.maven.MavenFactory.create(MavenFactory.java:111) at io.smallrye.beanbag.maven.MavenFactory.create(MavenFactory.java:124) at io.quarkus.bootstrap.resolver.maven.BootstrapMavenContext.configureMavenFactory(BootstrapMavenContext.java:889) at io.quarkus.bootstrap.resolver.maven.BootstrapMavenContext.initRepoSystemAndManager(BootstrapMavenContext.java:876) at io.quarkus.bootstrap.resolver.maven.BootstrapMavenContext.getRepositorySystem(BootstrapMavenContext.java:292) at io.quarkus.bootstrap.resolver.maven.MavenArtifactResolver.<init>(MavenArtifactResolver.java:114) at io.quarkus.bootstrap.BootstrapAppModelFactory.getAppModelResolver(BootstrapAppModelFactory.java:161) ... 7 more Caused by: java.lang.NoClassDefFoundError: org/codehaus/plexus/util/interpolation/ValueSource at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3549) at java.base/java.lang.Class.getDeclaredConstructors(Class.java:2727) at io.smallrye.beanbag.sisu.Sisu.findConstructor(Sisu.java:872) ... 18 more Caused by: java.lang.ClassNotFoundException: org.codehaus.plexus.util.interpolation.ValueSource at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ... 22 more
当前使用的测试相关依赖:
<!-- Testing --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5-mockito</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-test-security</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.wiremock</groupId> <artifactId>wiremock</artifactId> <version>${org.wiremock.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-jacoco</artifactId> <scope>test</scope> </dependency>
解决步骤
- 添加缺失的依赖:错误根源是找不到
org.codehaus.plexus.util.interpolation.ValueSource类,该类属于plexus-utils包。在pom.xml中添加以下依赖:<dependency> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-utils</artifactId> <version>3.5.1</version> <!-- 版本可根据Quarkus实际版本调整,确保兼容性 --> <scope>test</scope> </dependency> - 清理Maven缓存:执行
mvn clean install -U命令,强制更新依赖并清理本地仓库中可能损坏的缓存文件。 - 检查版本兼容性:确保Quarkus版本(2024.3.1-SNAPSHOT)与所有测试依赖版本匹配,建议使用Quarkus提供的BOM来统一管理依赖版本,避免冲突。
- 排查依赖冲突:运行
mvn dependency:tree查看依赖树,检查是否有其他依赖排除了plexus-utils,若有则调整依赖的排除规则。 - 切换测试执行方式:如果IDE中执行失败,尝试用Maven命令行执行
mvn test,排除IDE配置问题。
内容的提问来源于stack exchange,提问作者tomosnam
相关产品推荐
相关产品推荐

