如何外部化 jacoco javaagent 的属性

How to externalize the properties of a jacoco javaagent

我正在尝试从远程服务器获取代码覆盖率数据,因此我添加了一个 JVM 参数:

-javaagent:/opt/jacocoagent.jar=output=tcpserver,port=6300,includes="a pretty long list"

但不幸的是,包含列表太长,java 命令超出了我们系统限制的最大长度。

有什么方法可以指定一个外部 属性 文件,这样我就可以把长长的“包含列表”放在那里?

我已经阅读了 jacoco 文档,似乎在 "Offline Instrumentation" 中 运行 时,如果 jacoco-agent.properties 出现在类路径中,则 jacoco 代理将从 jacoco-agent.properties 读取属性。但是我不想用这个模式

自己找到了解决办法。 当oracle JVM启动时,它选择了一个环境变量JAVA_TOOL_OPTIONS

the JNI_CreateJavaVM function (in the JNI Invocation API) prepends the value of the environment variable to the options supplied in its JavaVMInitArgs argument.

所以在我的例子中,我定义了: JAVA_TOOL_OPTIONS=-javaagent:/path/to/jacocoagent.jar=output=tcpserver,address=*,port=6300,includes="一个很长的列表"

详情可参考: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/envvars002.html