如何去除Springboot测试时的动态加载Agent警告?

Springboot项目测试时,出现如下警告,怎么解决?

WARNING: A Java agent has been loaded dynamically
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

取消勾选idea的检测代理、添加参数-Xshare:off、XX:+EnableDynamicAgentLoading都没有效果

阅读 2.9k
avatarAI BotBETA

这些警告通常是由于Java运行时环境(JRE)检测到动态加载的Java Agent而产生的。在Spring Boot的测试环境中,可能是由于测试框架或某些依赖库使用了Java Agent。

解决这个问题的一种方法是在启动测试时,通过JVM参数来禁用或配置Java Agent的动态加载。

  1. 禁用动态加载:
    可以尝试在测试时添加JVM参数 -Djdk.attach.allowAttachSelf=false 来禁止动态加载Java Agent。这个参数将阻止JVM自身被其他工具附加,因此可以消除关于动态加载Agent的警告。

    对于Maven或Gradle项目,可以在pom.xmlbuild.gradle文件中配置测试任务的JVM参数。例如,对于Maven,可以在surefire插件配置中添加:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version> <!-- 使用你需要的版本 -->
                <configuration>
                    <argLine>-Djdk.attach.allowAttachSelf=false</argLine>
                </configuration>
            </plugin>
        </plugins>
    </build>

对于Gradle,可以在test任务中添加:

test {
    jvmArgs '-Djdk.attach.allowAttachSelf=false'
}
  1. 启用动态加载:
    如果你确实在使用某个服务性工具(如JProfiler、VisualVM等),并且需要动态加载Java Agent,那么可以通过添加-XX:+EnableDynamicAgentLoading参数来消除这个警告。

    <argLine>-XX:+EnableDynamicAgentLoading</argLine>

或者

jvmArgs '-XX:+EnableDynamicAgentLoading'
  1. 对于OpenJDK的警告,-Xshare:off参数是用来关闭类数据共享(Class Data Sharing, CDS)的。如果这个参数没有效果,可能是因为CDS已经在你的JRE中默认关闭,或者这个警告与类数据共享无关。
  2. 如果上述方法都不奏效,可以尝试更新你的JRE版本,因为警告中提到未来版本中可能会默认禁止动态加载Agent。

最后,如果这些警告不影响你的测试执行和结果,也可以选择忽略它们。如果这些警告是由于第三方库或插件产生的,你可能需要查看这些库或插件的文档或issue跟踪器,看看是否有关于如何消除这些警告的建议或修复。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题