【发布时间】:2014-10-26 22:01:09
【问题描述】:
我正在构建一个 JVM 诊断工具,并且我正在使用 JMX 连接到 JVM,我在这里面临的问题是我需要能够以在整个 unix 中兼容的方式加载 tools.jar 和windows,目前我正在使用 gradle 生成的运行脚本将tools.jar 加载到类路径中,但似乎这种方法取决于太多因素。
有没有人知道推荐或优雅的方式让这个 jar 在类路径中可用,而不是盲目地猜测它在哪里?
【问题讨论】:
我正在构建一个 JVM 诊断工具,并且我正在使用 JMX 连接到 JVM,我在这里面临的问题是我需要能够以在整个 unix 中兼容的方式加载 tools.jar 和windows,目前我正在使用 gradle 生成的运行脚本将tools.jar 加载到类路径中,但似乎这种方法取决于太多因素。
有没有人知道推荐或优雅的方式让这个 jar 在类路径中可用,而不是盲目地猜测它在哪里?
【问题讨论】:
ToolProvider.getSystemToolClassLoader()
这将返回知道tools.jar 的ClassLoader 实例。
如果您想要确切的路径,请使用
((URLClassLoader) ToolProvider.getSystemToolClassLoader()).getURLs()
【讨论】:
$JAVA_HOME/lib/tools.jar 附加到-classpath?或者,如果您需要在运行时加载它,请使用 ToolProvider。
JAVA_HOME 以“/jre”结尾,则加载../lib/tools.jar,否则加载lib/tools.jar。您可以在运行脚本中实现类似的逻辑。 JRE 中未包含工具以减少 JRE 下载大小。 Project jigsaw 可以通过允许按需加载模块来改变事情。