【问题标题】:How to add a jar to the boot classpath in java 9如何在 java 9 中将 jar 添加到引导类路径
【发布时间】:2018-01-08 10:41:30
【问题描述】:

在我在 java 8 上运行的应用程序中,我使用 -bootclasspath:p 将 jar 添加到引导类路径。在 java 9 中,该选项被删除。在 java 9 中做同样的事情的替代方法是什么?

【问题讨论】:

  • javac -bootclasspath 在针对 JDK 8 或更早版本时的工作方式与以前一样。java -Xbootclasspath/a 附加到引导类路径的工作方式与以前一样。
  • 我猜你的意思是-Xbootclasspath/a JVM 选项,我可以确认它仍然存在于 9.0.1 的 java 选项中。还是我误解了这个问题?

标签: java classpath java-9 bootclasspath


【解决方案1】:

您可以使用-Xbootclasspath/a。请参考release notes 声明:-

在此版本中,大部分引导类路径已被删除。爪哇 -Xbootclasspath-Xbootclasspath/p 选项已被删除。

javac -bootclaspath 选项只能在编译到 JDK 8 或 年纪大了。系统属性sun.boot.class.path 已被移除。

依赖于覆盖平台类进行测试的部署 -Xbootclasspath/p 的用途需要更改为使用 --patch-module 选项记录在 JEP 261 中。

-Xbootclasspath/a 选项保持不变。

【讨论】:

  • 谢谢。我正在使用 -Xbootclasspath/p 。应将其更改为 -Xbootclasspath/a 。希望除了前者附加到类路径的开头而后者附加在末尾之外没有区别。
  • 我在使用 java 11 时遇到了同样的问题,甚至 -Xbootclasspath/a 也无法正常工作。请问有谁知道解决方法..
【解决方案2】:

-bootclasspath:p 将 jar 中的类添加到默认引导类路径的开头(前置)。 JVM 9 或更高版本不再支持它。

-bootclasspath:a 将 jar 中的类添加到默认引导类路径的末尾(附加)。 JVM 9 或更高版本支持此选项。 https://docs.oracle.com/cd/E15289_01/JRCLR/optionx.htm#i1021218

就我而言,当我按此顺序声明变量时:

JAVA_OPTS="$SOME_OPT"

JAVA_OPTS="-javaagent:../agent.jar -Xbootclasspath/a:../agent-boot.jar $JAVA_OPTS"

我发现了 classNotFoundException。当我颠倒顺序时:

JAVA_OPTS="-javaagent:../agent.jar -Xbootclasspath/a:../agent-boot.jar $JAVA_OPTS"

JAVA_OPTS="$SOME_OPT"

ClassNotFound 异常消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2014-07-15
    • 2016-02-14
    • 2016-11-04
    • 1970-01-01
    • 2015-03-02
    相关资源
    最近更新 更多