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

运行Arquillian集成测试时遭遇java.lang.NoSuchMethodError错误求助

解决Arquillian + Weld-EE嵌入式容器的JUnit版本冲突问题

看起来你遇到的NoSuchMethodError是典型的JUnit版本冲突导致的问题,下面详细分析并给出解决方案:

问题根源

错误信息里的org.junit.runners.model.TestClass.getAnnotatedFields()方法是在JUnit 4.12中才被引入的,而你配置的JUnit版本是4.11——这个版本根本没有这个方法。Arquillian 1.4.0.Final的JUnit容器适配器依赖的JUnit版本要求高于4.11,当测试运行时,类路径里同时存在Arquillian依赖的高版本JUnit类和你指定的4.11版本类,就会抛出这个找不到方法的错误。

解决方案

1. 升级JUnit版本到兼容版本

把你的JUnit依赖从4.11升级到4.12或更高的兼容版本(比如4.13.2),修改后的依赖配置如下:

compile group: 'org.jboss.arquillian', name: 'arquillian-bom', version: '1.4.0.Final', ext: 'pom'
testCompile group: 'org.jboss.arquillian.junit', name: 'arquillian-junit-container', version: '1.4.0.Final'
testCompile group: 'org.jboss.arquillian.container', name: 'arquillian-weld-ee-embedded-1.1', version: '1.0.0.Final'
testCompile 'org.jboss.weld:weld-core:2.4.5.Final'
testCompile group: 'junit', name: 'junit', version: '4.13.2'

2. 验证依赖树,排除冲突

如果你担心还有其他依赖传递引入旧版本JUnit,可以通过Gradle命令查看依赖树:

gradle dependencies --configuration testCompileClasspath

如果发现有其他依赖引入了JUnit 4.11,在对应的依赖上添加排除配置,比如:

testCompile('some-other-dependency') {
    exclude group: 'junit', module: 'junit'
}

3. 确保Arquillian BOM管理所有相关依赖

你已经引入了Arquillian的BOM,它会帮你管理Arquillian相关组件的版本兼容性,建议保持BOM的版本和其他Arquillian依赖版本一致(你现在已经做到了,都是1.4.0.Final),这样能减少版本冲突的概率。

验证测试

修改完依赖后,重新运行gradle clean test,应该就能正常启动Weld-EE嵌入式容器并执行测试了。你的测试代码本身没有问题,即使不注入Bean也能正常运行,问题完全出在依赖版本的不兼容上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:21:15