将 Java 代理检测传输到生成的 JVM
Transmitting Java agents instrumentation to spawned JVM
上下文
我已经构建了一个自定义 Junit 运行ner 以满足我的特定需求(测试 Java 使用 MPI 的程序,但这与此处无关)。我的 运行ner 的关键部分在于将多个 JVM 扩展到 运行 测试。我使用 ProcessBuilder
来执行此操作。
我的自定义 运行ner 效果很好,这让我想到了我的问题:
问题
我正在使用 Jacoco 和 Maven 来创建测试覆盖率报告。在使用普通 Junit 框架的测试中,这工作正常。但是,当使用我的自定义 Junit 运行ner 时,情况并非如此。
更具体地说,进程 运行ning 我的自定义 运行ner 正在被 Jacoco 跟踪(我可以在报告的 "sessions" 页面中看到它),但是 JVM不是用进程生成器生成的。
一些令人鼓舞的迹象: 如果我手动将参数 -javaagent:C:\Users\Patrick\.m2\[...]\org.jacoco.agent-0.8.5-runtime.jar=destfile=C:\[...]jacoco.exec
添加到我的流程构建器,它将起作用。 Jacoco 正在跟踪生成的 JVM,我可以看到我感兴趣的 类 已被跟踪。但这并不令人满意,我不能保留这个硬编码的参数。
我的问题
有没有办法从 运行ning JVM 中获取命令的 -javaagent
部分?
就我而言,我会寻找潜在的 java 代理监控我的自定义 Junit 运行ner。如果有的话,我会把它们带到我用 ProcessBuilder
生成的进程中。
我在 Properties (System.getProperties()
) 中寻找代理人的迹象,但我在那里找不到任何东西。
我很乐意提供任何其他信息。
您可以使用 RuntimeMXBean.getInputArguments()
:
获取大部分 VM 参数
List<String> vmArgs = ManagementFactory.getRuntimeMXBean().getInputArguments();
此列表包含(至少在我的机器上)整个 -javaagent:...
个参数,以及其他参数。
上下文
我已经构建了一个自定义 Junit 运行ner 以满足我的特定需求(测试 Java 使用 MPI 的程序,但这与此处无关)。我的 运行ner 的关键部分在于将多个 JVM 扩展到 运行 测试。我使用 ProcessBuilder
来执行此操作。
我的自定义 运行ner 效果很好,这让我想到了我的问题:
问题
我正在使用 Jacoco 和 Maven 来创建测试覆盖率报告。在使用普通 Junit 框架的测试中,这工作正常。但是,当使用我的自定义 Junit 运行ner 时,情况并非如此。
更具体地说,进程 运行ning 我的自定义 运行ner 正在被 Jacoco 跟踪(我可以在报告的 "sessions" 页面中看到它),但是 JVM不是用进程生成器生成的。
一些令人鼓舞的迹象: 如果我手动将参数 -javaagent:C:\Users\Patrick\.m2\[...]\org.jacoco.agent-0.8.5-runtime.jar=destfile=C:\[...]jacoco.exec
添加到我的流程构建器,它将起作用。 Jacoco 正在跟踪生成的 JVM,我可以看到我感兴趣的 类 已被跟踪。但这并不令人满意,我不能保留这个硬编码的参数。
我的问题
有没有办法从 运行ning JVM 中获取命令的 -javaagent
部分?
就我而言,我会寻找潜在的 java 代理监控我的自定义 Junit 运行ner。如果有的话,我会把它们带到我用 ProcessBuilder
生成的进程中。
我在 Properties (System.getProperties()
) 中寻找代理人的迹象,但我在那里找不到任何东西。
我很乐意提供任何其他信息。
您可以使用 RuntimeMXBean.getInputArguments()
:
List<String> vmArgs = ManagementFactory.getRuntimeMXBean().getInputArguments();
此列表包含(至少在我的机器上)整个 -javaagent:...
个参数,以及其他参数。