java - 如何将 deploy.jar 添加到类路径?

标签 java classloader

我面临的问题是:我需要将 ${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 中的用户环境中定义,另外我需要为每个平台编写一个脚本)
  • deploy.jar 文件合并到我的可交付成果中的解决方案只有在我在 Windows 平台上进行构建时才有效。不幸的是,当在 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)

最佳答案

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

关于java - 如何将 deploy.jar 添加到类路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2510104/

相关文章:

java linux centos DISPLAY 环境变量

java - Intellij Maven 依赖项 HttpCore 未自动解析

java - jstat 过多 "Class Loader Time"

java - Tomcat 8 中的类路径和 jar 文件加载顺序

安卓: "Class loader may fail for processes that host multiple applications"

java - 如何在我的java项目中使用两个版本的jar

java - 在 Tomcat 中找不到 logback.xml(或其他资源)

java - 带有HBase的Hadoop:类路径中存在 Guava jar ,但是执行抛出 “ThreadFactoryBuilder”类未找到类异常

java - 尝试在 Java 中的数组上使用 .stream() 时出现“找不到符号错误”

Java:JSONObject继承