标签: bootclasspath

jdk.dynalink在Java 9中的bootclasspath中不可见

我们的项目是使用Eclipse OSGi开发的,但也提供了通过jardesc文件导出的普通JAR .该项目使用ASM库和javaagentinvokevirtualinvokedynamic调用交换.

这在Java 7和8中运行良好.现在,我们升级到Java 9并移植我们的实现以供使用jdk.dynalink.

java --version`
java 9.0.4
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
Run Code Online (Sandbox Code Playgroud)

出口部分

  • OTRE_MIN:最小运行时和元对象协议部分.
  • OTRE_DYN:动态编织代码(ASM)和运行时的其余部分.
  • OTRE_AGEND:javaagent.

目前,OTRE_MIN还包括OTRE_DYN.所以一切都放入了bootclasspath.

我用以下代码启动程序

JVM_ARGS="-d64 -Xms1024m -Xmx4048m -ea"
MODULES="--add-reads jdk.dynalink=ALL-UNNAMED --add-reads java.base=ALL-UNNAMED"

${JAVA_HOME}bin/java $MODULES \
-Xbootclasspath/a:${OTRE_MIN} -javaagent:$OTREDYN_AGENT $JVM_ARGS \
-jar ...
Run Code Online (Sandbox Code Playgroud)

但是,似乎 jdk.dynalink在bootclasspath上不再可见包.

java.lang.NoClassDefFoundError: jdk/dynalink/linker/GuardingDynamicLinker
at org.eclipse.objectteams.otredyn.runtime.dynamic.CallinBootstrap.<clinit>(CallinBootstrap.java:19)
at org.eclipse.objectteams.otredyn.bytecode.asm.CreateCallAllBindingsCallInOrgMethod.<clinit>(CreateCallAllBindingsCallInOrgMethod.java:115)
at org.eclipse.objectteams.otredyn.bytecode.asm.AsmWritableBoundClass.createCallAllBindingsCallInOrgMethod(AsmWritableBoundClass.java:300)
at org.eclipse.objectteams.otredyn.bytecode.AbstractBoundClass.weaveBindingInImplementedMethod(AbstractBoundClass.java:1180)
at org.eclipse.objectteams.otredyn.bytecode.AbstractBoundClass.handleTaskList(AbstractBoundClass.java:741) …
Run Code Online (Sandbox Code Playgroud)

java module classpath bootclasspath

9
推荐指数
1
解决办法
197
查看次数

如何在java 9中将jar添加到引导类路径中

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

java classpath bootclasspath java-9

8
推荐指数
1
解决办法
3629
查看次数

如何在 JDK 9 或更高版本中获取引导类路径

我有一个读取系统属性的类加载器应用程序 sun.boot.class.path

但是我在 JDK 9 的发行说明中发现此属性已被删除。

 System.getProperty("sun.boot.class.path"); // In JDK 9/10 this returns null 
Run Code Online (Sandbox Code Playgroud)

但是我还是想在JDK 10中检索这个属性值,怎么做呢?

我期待如下值:

/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jce.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jfr.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/classes
Run Code Online (Sandbox Code Playgroud)

供参考:

我不想使用该-Xbootclasspath选项。只需要路径值。

java classpath bootclasspath java-9 java-module

8
推荐指数
1
解决办法
4105
查看次数

如何配置Eclipse插件的bootstrap类路径?

我想替换我的Eclipse插件所依赖的一些类(javax.tools.*)rt.jar依赖于我自己的这些类的版本.rt.jar通常通过设置bootclasspath来替换类.我的问题是如何在Eclipse插件中执行此操作.

我创建了这些类的版本的JAR文件,并将其添加到Bundle-ClassPath的属性MANIFEST.MF,该bin.includes属性build.properties,和.classpath.我还将我的JAR文件的路径输入到Eclipse Application启动配置对话框的名为"Bootstrap entries:"的字段中,并将我的JAR移动到"Project Properties> Build Path"的"Order and Export"选项卡中的顶部.尽管如此,当我使用Eclipse Application启动配置运行Eclipse插件时,插件使用原始类rt.jar而不是我的JAR文件中的类.

我如何配置我的Eclipse插件,以便它首先查找我的JAR文件中的类,并且rt.jar仅在我的JAR文件中找不到该类时才进行咨询?

java eclipse classpath bootclasspath

6
推荐指数
1
解决办法
3万
查看次数

在Android Building中修改BOOTCLASSPATH

这个问题与另一个问题有关.我重新编译了Android框架并生成了一个新图像.我需要在原始框架中添加一些类,并通过添加进入/ system/framework的新jar来实现.我修改了BOOTCLASSPATH以考虑这些新罐子.

构建映像并闪烁到设备不起作用.必须在此之前运行一些优化,但我不知道该过程是如何进行的.

在生成映像之前我应该​​执行哪些构建步骤,或者我有什么其他替代方法,以便可以从应用程序访问扩展框架类?

android build classpath firmware bootclasspath

5
推荐指数
1
解决办法
4801
查看次数

如何以编程方式通过引导类加载器加载另一个类?

我知道有一个“引导类加载器”从 jre/lib(rt.jar 等)加载所有类。是否有可能让我使用这个“引导类加载器”以便从另一个非 java 包加载额外的类?

我说的是引导程序类路径,它与此答案中描述的常规类路径非常不同:我应该如何在运行时动态加载 Jars?

java classloader bootclasspath

3
推荐指数
1
解决办法
2013
查看次数