当前位置: 首页 > 知识库问答 >
问题:

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

楮杰
2024-03-07

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

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

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

共有1个答案

韩嘉祯
2024-03-07

这些警告通常是由于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跟踪器,看看是否有关于如何消除这些警告的建议或修复。

 类似资料:
  • 现有一个springboot项目,通过扫描二维码查询信息,比如一棵树,扫描二维码后可以看到他相关的信息。但这个项目不止有树类型,还有道路,某个物品。所以将项目分模块开发,核心模块作为一个jar包,复制提供基础服务如数据导入导出。各类型构建成单独的jar。部署时需要那种类型就加载对应的jar。这样做是为了满足不同客户需求。 尝试: java -Xbootclasspath/a:file:./libs

  • 我现在在运行spring boot测试时遇到了这个问题。我有一个带有vaadin和micro services配置的spring boot项目,当我运行测试用例时,在引擎盖后面会自动加载一些可自动配置的类,并且测试需要更多的时间来启动和运行。所以有没有什么方法可以避免加载可自动配置的类,这样我就可以快速启动我的项目。 我的要求是,我必须能够获得应用程序上下文,而不加载一堆自动可配置类。 我正在使用

  • 问题内容: 为什么用Java这么难?如果要使用任何类型的模块系统,则需要能够动态加载JAR文件。有人告诉我,有一种方法可以通过编写自己的方法来完成,但这对于(至少在我看来)应该像调用以JAR文件作为其参数的方法一样容易的事情来说是很多工作。 对执行此操作的简单代码有何建议? 问题答案: 很难的原因是安全性。类加载器是不可变的。你不应在运行时随意向其添加类。实际上,我很惊讶能与系统类加载器一起使用。

  • 问题内容: 为什么用Java这么难?如果要使用任何类型的模块系统,则需要能够动态加载JAR文件。有人告诉我,有一种方法可以通过编写自己的方法来完成,但这对于(至少在我看来)应该像调用以JAR文件作为其参数的方法那样容易的事情来说是很多工作。 问题答案: 很难的原因是安全性。类加载器是不可变的。您不应在运行时随意向其添加类。实际上,我很惊讶能与系统类加载器一起使用。这是制作自己的子类加载器的方法:

  • 我知道如何加载CSS。 怎么卸载?

  • 我正在使用在我的java应用程序中生成Excel工作表。在 excel 中设置的数据以字符串类型动态提供。对于列 1,值为字母数字。当我生成Excel时,它会在单元格上给我绿色指示,并警告“数字存储为文本”或“带有2位数年份的文本日期”。 我想去掉那个警告。我发现在excel中,我们可以将单元格标记为“忽略错误”,以忽略警告。 如何以编程方式实现它,或者是否有任何其他替代方法来实现此任务? 我还附