小编lsc*_*tze的帖子

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
查看次数

标签 统计

bootclasspath ×1

classpath ×1

java ×1

module ×1