【问题标题】:How to add deploy.jar to classpath?如何将 deploy.jar 添加到类路径?
【发布时间】:2010-03-28 15:25:31
【问题描述】:

我面临的问题:我需要在运行时将${java.home}/lib/deploy.jar JAR 文件添加到类路径中(从 java 中动态添加)。

  • Thread#setContextClassLoader(ClassLoader)(提到here)的解决方案由于this bug 而不起作用(如果有人可以解释真正的问题 - 欢迎您)。
  • -Xbootclasspath/a:"%JAVA_HOME%/jre/lib/deploy.jar" 的解决方案对我来说效果不佳,因为我希望将“纯可执行 jar”作为可交付成果:请不要包装脚本(更多 %JAVA_HOME% 可能未在 Windows 的用户环境中定义例如,另外我需要为每个平台编写一个脚本)
  • 仅当我在 Windows 平台上进行构建时,将 deploy.jar 文件合并到我的可交付成果中的解决方案才有效。不幸的是,当交付物在 Linux 上运行的构建服务器上生成时,我得到了依赖于 Linux 的 JAR,它不能在 Windows 上执行——它失败并显示以下跟踪。

我已阅读 How the Java Launcher Finds ClassesJava programming dynamics: Java classes and class loading 的文章,但我没有额外的想法,如何正确处理这种情况。

非常欢迎任何建议或解决方案。

追踪:

java.lang.NoClassDefFoundError: Could not initialize class com.sun.deploy.config.Config
    at com.sun.deploy.net.proxy.UserDefinedProxyConfig.getBrowserProxyInfo(UserDefinedProxyConfig.java:43)
    at com.sun.deploy.net.proxy.DynamicProxyManager.reset(DynamicProxyManager.java:235)
    at com.sun.deploy.net.proxy.DeployProxySelector.reset(DeployProxySelector.java:59)
...
java.lang.NullPointerException
    at com.sun.deploy.net.proxy.DynamicProxyManager.getProxyList(DynamicProxyManager.java:63)
    at com.sun.deploy.net.proxy.DeployProxySelector.select(DeployProxySelector.java:166)

【问题讨论】:

    标签: java classloader


    【解决方案1】:

    引导类路径没有类加载器,因此无法动态添加。但是,您可以将 Class-Path: deploy.jar 属性添加到您的 MANIFEST.MF 并要求您的 JAR 使用 -Xbootclasspath/a:myjar.jar 运行。如果 deploy.jar 位于同一目录中,它也会被加载到引导类路径中。

    【讨论】:

    • @Jevgeni:如果您已经将deploy.jar 添加到类路径,是否需要将它添加到引导类路径?我想不是。无论如何,我想知道如何动态添加这个库。如果您在我提到的顶部有解决方案,请分享。
    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2016-11-04
    • 2019-12-22
    • 2014-09-29
    • 1970-01-01
    相关资源
    最近更新 更多