【问题标题】:Transmitting Java agents instrumentation to spawned JVM将 Java 代理检测传输到衍生的 JVM
【发布时间】:2020-05-28 05:03:51
【问题描述】:

上下文

我已经为我的特定需求构建了一个自定义 Junit 运行器(测试使用 MPI 的 Java 程序,但这与这里无关)。我的跑步者的关键部分在于跨越多个 JVM 来运行测试。我使用ProcessBuilder 执行此操作。

我的自定义跑步者效果很好,这让我想到了我的问题:

问题

我正在使用 Jacoco 和 Maven 创建测试覆盖率报告。在使用普通 Junit 框架的测试中,这可以正常工作。但是,当使用我的自定义 Junit 运行器时,情况并非如此。

更具体地说,Jacoco 正在跟踪运行我的自定义运行程序的进程(我可以在报告的“会话”页面中看到它),但由进程构建器生成的 JVM 却没有。

一些令人鼓舞的迹象:如果我手动将参数 -javaagent:C:\\Users\\Patrick\\.m2\[...]\org.jacoco.agent-0.8.5-runtime.jar=destfile=C:\\[...]jacoco.exec 添加到我的流程构建器中,它将起作用。 Jacoco 正在跟踪生成的 JVM,我可以看到我感兴趣的类被跟踪。但这并不令人满意,我不能保留这个硬编码的参数。

我的问题

有没有办法从正在运行的 JVM 中获取命令的 -javaagent 部分?

就我而言,我会寻找潜在的 Java 代理来监视我的自定义 Junit 运行器。如果有的话,我会将它们带到我使用ProcessBuilder 生成的进程中。

我在 Properties (System.getProperties()) 中寻找代理的任何迹象,但在那里找不到任何东西。

我很乐意提供任何其他信息。

【问题讨论】:

    标签: java javaagents


    【解决方案1】:

    您可以使用RuntimeMXBean.getInputArguments() 获取大部分 VM 参数:

    List<String> vmArgs = ManagementFactory.getRuntimeMXBean().getInputArguments();
    

    此列表包含(至少在我的机器上)整个 -javaagent:... 参数以及其他参数。

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多