能否在Java 17环境下运行weld-junit5?WildFly 26测试遇异常
问题解决:Java17 + WildFly26 运行weld-junit5 出现代理类加载异常
异常根源
你遇到的WELD-001524异常,核心原因是Java 9+ 移除了java.lang.Class中的override字段,而你尝试的weld-junit5版本(2.0.2、3.0.0.Final、4.0.0.Final)依赖的Weld字节码工具仍在通过反射获取这个已不存在的字段,导致ClassPool初始化失败,最终无法生成代理类。
解决方案
1. 使用适配Java17的weld-junit5版本
WildFly26集成的是Weld 4.0.x,因此需要使用weld-junit5 4.0.1.Final及以上版本——该版本已修复Java17下的反射字段兼容问题。
Maven依赖配置示例:
<dependency> <groupId>org.jboss.weld.junit5</groupId> <artifactId>weld-junit5</artifactId> <version>4.0.1.Final</version> <scope>test</scope> </dependency>
2. 排除冲突依赖
如果项目中存在旧版Weld核心、字节码工具等依赖,需手动排除,避免与WildFly自带或weld-junit5的依赖冲突。比如:
<dependency> <groupId>org.jboss.weld.junit5</groupId> <artifactId>weld-junit5</artifactId> <version>4.0.1.Final</version> <scope>test</scope> <exclusions> <exclusion> <groupId>org.jboss.weld</groupId> <artifactId>weld-core-impl</artifactId> </exclusion> </exclusions> </dependency>
3. 检查测试类配置
确保测试类使用正确的weld-junit5注解:
- 用
@EnableWeld开启Weld容器支持 - 用
@AddBeanClasses或@AddPackages指定需要扫描的Bean类/包
示例测试类:
import org.jboss.weld.junit5.EnableWeld; import org.jboss.weld.junit5.AddBeanClasses; import org.junit.jupiter.api.Test; @EnableWeld @AddBeanClasses(YourBeanClass.class) public class YourTest { // 测试逻辑 }
结论
WildFly26搭配Java17完全可以运行weld-junit5,只需使用适配的版本并处理好依赖冲突即可。
内容的提问来源于stack exchange,提问作者Jens
相关产品推荐
相关产品推荐

