【问题标题】:Correct way of referencing tools.jar in a cross-platform way以跨平台方式引用 tools.jar 的正确方法
【发布时间】:2014-10-26 22:01:09
【问题描述】:

我正在构建一个 JVM 诊断工具,并且我正在使用 JMX 连接到 JVM,我在这里面临的问题是我需要能够以在整个 unix 中兼容的方式加载 tools.jar 和windows,目前我正在使用 gradle 生成的运行脚本将tools.jar 加载到类路径中,但似乎这种方法取决于太多因素。

有没有人知道推荐或优雅的方式让这个 jar 在类路径中可用,而不是盲目地猜测它在哪里?

【问题讨论】:

    标签: java jvm tooling


    【解决方案1】:

    ToolProvider.getSystemToolClassLoader()

    这将返回知道tools.jarClassLoader 实例。
    如果您想要确切的路径,请使用

        ((URLClassLoader) ToolProvider.getSystemToolClassLoader()).getURLs()
    

    【讨论】:

    • 谢谢你,是否有命令行开关可以在类路径中加载这些类?
    • @JuanAlbertoLópezCavallotti 我不确定问题出在哪里。为什么不在运行脚本中简单地将$JAVA_HOME/lib/tools.jar 附加到-classpath?或者,如果您需要在运行时加载它,请使用 ToolProvider
    • 嗯,根据所使用的安装,这可能位于不同的位置,IE 如果 JAVA_HOME 设置为 JDK_HOME/jre(这是一个有效配置),那么 tools.jar 将位于 $JAVA_HOME/.. /lib/tools.jar 所以我试图避免在 -classpath 上有许多指向不同位置的条目。不过,你知道为什么JDK默认不会在应用类加载器中加载这些的原因吗?
    • @JuanAlbertoLópezCavallotti 这就是 ToolProvider 的工作方式。如果发现JAVA_HOME 以“/jre”结尾,则加载../lib/tools.jar,否则加载lib/tools.jar。您可以在运行脚本中实现类似的逻辑。 JRE 中未包含工具以减少 JRE 下载大小。 Project jigsaw 可以通过允许按需加载模块来改变事情。
    猜你喜欢
    • 2014-06-28
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多