升级JDK17至21后IntelliJ运行JUnit测试遇Java动态代理加载警告
JDK 21升级后JUnit测试出现ByteBuddy动态Agent警告的解决办法
快速屏蔽警告
- 添加JVM参数
-XX:+EnableDynamicAgentLoading,直接消除该警告(适合确认是合法工具加载Agent的场景)- Maven项目:在
maven-surefire-plugin中配置参数<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-XX:+EnableDynamicAgentLoading</argLine> </configuration> </plugin> - Gradle项目:在test任务中添加JVM参数
test { jvmArgs '-XX:+EnableDynamicAgentLoading' }
- Maven项目:在
根治问题(推荐)
你的警告来自旧版ByteBuddy(1.14.9),它的Agent加载方式不符合JDK 21的新规范。升级到ByteBuddy 1.14.10及以上版本即可解决,新版本已适配JDK 21的Agent加载规则:
- Maven项目更新依赖:
<dependency> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy</artifactId> <version>1.14.10</version> <scope>test</scope> </dependency> <dependency> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy-agent</artifactId> <version>1.14.10</version> <scope>test</scope> </dependency> - Gradle项目更新依赖:
testImplementation 'net.bytebuddy:byte-buddy:1.14.10' testImplementation 'net.bytebuddy:byte-buddy-agent:1.14.10'
排查Agent加载来源
如果不确定是否是ByteBuddy导致的,添加JVM参数 -Djdk.instrument.traceUsage,运行测试后会输出详细的Agent加载调用栈,帮你定位具体触发组件,再针对性处理。
内容的提问来源于stack exchange,提问作者Abhijit Mondal Abhi
相关产品推荐
相关产品推荐

