问题标签 [bootclasspath]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - jdk.dynalink 在 Java 9 的引导类路径中不可见
我们的项目是使用 Eclipse OSGi 开发的,但也通过jardesc文件提供普通的 JAR 文件以供导出。该项目使用 ASM 库和javaagent来交换调用。invokevirtual
invokedynamic
这在 Java 7 和 8 中运行良好。现在,我们升级到 Java 9 并将我们的实现移植到使用jdk.dynalink
.
出口零件
OTRE_MIN
:最小的运行时和元对象协议部分。OTRE_DYN
:动态编织代码(ASM)和运行时的其余部分。OTRE_AGEND
: java代理。
目前,OTRE_MIN
还包括OTRE_DYN
. 因此,所有内容都放入了引导类路径。
我用以下代码启动程序
但是,似乎这些 jdk.dynalink
包在引导类路径上不再可见。
我阅读了有关 Java 9 和模块系统以及类加载器更改的其他线程,但它们没有为问题提供任何解决方案。
如何使Java 9 之前jdk.dynalink
的类可见?$OTRE_MIN
java - 如何在 java 11 中将 jar 添加到引导类路径
在我在 Java 8 上运行的应用程序中,我使用了使用 org.jboss.logmanager.LogManager 的第三方库,所以我在引导类路径中添加了这个 jar,它工作正常。但是当迁移到 java 11 时,-Xbootclasspath/a 或 -Xbootclasspath/p 都不起作用,我无法启动我的应用程序。
我在 java 9答案中找到了 How to add a jar to the boot classpath 。但它不适用于 java 10 或 11。任何人都可以帮助我吗?
java - 在 jdk9+ 上找不到引导类路径
openjdk 文档“JEP 261:模块系统”指出:
“一个相关的选项,-Xbootclasspath/a
允许将文件和目录附加到默认的引导类路径。这个选项,以及java.lang.instrument
包中的相关 API,有时被检测代理使用,因此为了兼容性,它在运行时仍然受支持。
它的值(如果指定)通过 JDK 特定的系统属性报告jdk.boot.class.path.append
。”
但是,当我尝试使用此功能时,它不起作用。具体来说,我正在使用 Java 代理进行检测。
在JDK7和JDK8上一切正常。在JDK9+上-Xbootclasspath/a
似乎可以正常工作,但系统属性jdk.boot.class.path.append
始终为null
.
在 Java 7/8 上:
按预期工作。
在 Java 9 上:
总是返回空字符串。
我添加了一些调试代码来转储所有系统属性,似乎没有这样的属性。
我已经尝试过jdk-9.0.4
并且jdk-11.0.3
得到了类似的结果。
关于如何在 JDK9+ 上获取引导类路径的任何想法?
java - 替换java中的bootclasspath选项
我正在尝试仅从命令行手动构建 Android 应用程序,而不使用任何额外的东西,例如构建系统(Gradle)。我正在关注这个页面。
但是,我一直在编译 Java 源文件。
每当我发出命令时:(
javac -d obj -classpath src -bootclasspath E:/.android/sdk/platforms/android-10/android.jar src/com/example/hello/MainActivity.java
我的 Android SDK 位于E:/.android/SDK文件夹中)
我
error: option --boot-class-path not allowed with target 12
正在使用 JDK 版本 12.0.2。我知道从 JDK 版本 9 开始,boot-class-path选项被删除了。那么,如何编译 Java 源文件呢?JDK 12.0.2中boot-class-path选项的替代方法是什么?
java - 引导类路径未与 -source 8 一起设置
我正在将我的应用程序从 java 1.8 升级到 java 11 当我尝试使用 ant 1.10.8 构建时,我的构建失败但我也看到了一个警告
我已经
在 build.xml中设置source=1.8
了蚂蚁任务target=1.8
javac
我错过了什么吗?如果我没有错,我需要设置引导类路径,但我不确定如何在 ant build.xml 文件中进行设置。我也得到以下错误
请帮忙
java - 我们如何使用 --patch-module 从 OpenJDK 11 覆盖 java.base/java.lang.Integer?
在 JDK-8 中,我们可以编译我们更改的 java.lang 类并重建rt.jar
. 然后我们可以通过在 bootclasspath 中添加-Xbootclasspath:<yourpathto>/rt.jar
. 这样做,我们可以例如使 java.lang.Integer 成为非最终的以用于测试目的。
在 JDK-11 中,这是不同的。修补是通过完成的--patch-modules
,我无法让它工作。我做了以下事情:
- 去掉 final 修饰符并从 openjdk-11 源重新编译 java.base 模块
- 添加了
--patch-module java.base=<path-to-my-compiled-java.base-directory>
- 它仍然失败
error: cannot inherit from final Integer
。可能我们不能再覆盖 JDK 源文件的类声明了?那会很奇怪。 - 我还尝试将这些类文件添加到 jar 并尝试将所有可能的根目录传递给
--patch-module
参数 - 我尝试
package-info.class
从编译java.base
目录中删除模块并尝试显式java.base.java.lang.Integer
添加--add-opens
文档对这种特定用法并不十分清楚。
来自 maven 的整个 javac 命令(我已经尝试过 javac 和 maven-compiler-plugin):
javac -d ./target/classes -classpath <classpathfiles> -sourcepath <sourcefiles> -s ./target/generated-sources/annotations -g -nowarn -target 11 -source 11 -encoding UTF-8 --patch-module=java.base=../runtimejar/mods/src/java.base -Xplugin:Manifold
(缩短路径名称等以提高可读性)
我在这里想念什么?为什么我不能这样修改java.base/java.lang.Integer
?
java-11 - 目标 11 在 Windows 上失败时不允许引导类路径
我正在将 IKVM 代码库从 Java 8 升级到 Java 11,得到“目标 11 不允许引导类路径”