繁体   English   中英

独立 Nashorn 给出 java.lang.NoClassDefFoundError: jdk/dynalink/RelinkableCallSite using java 11

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM