![](/img/trans.png)
[英]Nashorn java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/JSObject
[英]Standalone Nashorn giving java.lang.NoClassDefFoundError: jdk/dynalink/RelinkableCallSite using java 11
我使用的是 nashorn 内置 java 11,但我需要最新独立版本的功能。 但是,当我使用
ScriptEngine engine = new org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory().getScriptEngine();
后来使用评估脚本,我得到了:
java.lang.NoClassDefFoundError: jdk/dynalink/RelinkableCallSite
at org.openjdk.nashorn.internal.runtime.Context.<init>(Context.java:655)
at org.openjdk.nashorn.internal.runtime.Context.<init>(Context.java:585)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.lambda$new$0(NashornScriptEngine.java:126)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.<init>(NashornScriptEngine.java:124)
at org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory.getScriptEngine(NashornScriptEngineFactory.java:152)
at com.jthink.songkong.analyse.filename.FileNameFormatter.getRenameMaskJavascriptEngine(FileNameFormatter.java:668)
at com.jthink.songkong.analyse.filename.FileNameFormatter.isAlbumMask(FileNameFormatter.java:752)
at com.jthink.songkong.analyse.filename.FileNameFormatter.isAlbumMask(FileNameFormatter.java:732)
at com.jthink.songkong.analyse.analyser.SongSaver.init(SongSaver.java:130)
at com.jthink.songkong.analyse.toplevelanalyzer.FixSongsController.reset(FixSongsController.java:164)
at com.jthink.songkong.analyse.toplevelanalyzer.FixSongsController.start(FixSongsController.java:185)
at com.jthink.songkong.ui.swingworker.FixSongs.doInBackground(FixSongs.java:49)
at com.jthink.songkong.ui.swingworker.FixSongs.doInBackground(FixSongs.java:18)
at java.desktop/javax.swing.SwingWorker$1.call(SwingWorker.java:304)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.desktop/javax.swing.SwingWorker.run(SwingWorker.java:343)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ClassNotFoundException: jdk.dynalink.RelinkableCallSite
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 20 more
它是战争中的 Maven 项目,部署在 Wildfly 上。 当我导入 jdk/dynalink/RelinkableCallSite 时,它就在那里,所以我找不到解决方案。
在此先感谢您的帮助。
我们找到了解决方案。 Wildfly 正在导出 JDK 模块并将它们打包在自身中,但它采用了 nashorn 内置 java 11 中的模块,该模块使用了旧版本的 dynalink - jdk/internal/dynalink
。 为了解决这个问题,我们在jboss-deployment-structure.xml
中导出了模块:
<system export="true">
<paths>
<path name="jdk/dynalink"/>
<path name="jdk/dynalink/beans"/>
<path name="jdk/dynalink/linker"/>
<path name="jdk/dynalink/linker/support"/>
<path name="jdk/dynalink/support"/>
</paths>
</system>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.