将Java代理检测发送到生成的JVM

问题描述 投票:1回答:1

上下文

我已经针对我的特定需求构建了一个自定义的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生成的过程中。

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

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

java javaagents
1个回答
0
投票

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

RuntimeMXBean.getInputArguments()

此列表(至少在我的机器上包含)整个List<String> vmArgs = ManagementFactory.getRuntimeMXBean().getInputArguments(); 参数以及其他参数。

© www.soinside.com 2019 - 2024. All rights reserved.