I was using nashorn built-in java 11, but i need functionality from newest standalone version. However, when i'm using
ScriptEngine engine = new org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory().getScriptEngine();
and later use evaling script, i got:
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
Its a maven project in war, deployed on wildfly. When i'm importing jdk/dynalink/RelinkableCallSite it is there, so i can't find solution.
Thanks in advance for Your help.
We have found the solution. Wildfly was exporting JDK modules and packing them within itself, but it took the ones from nashorn built-in java 11, which used an older version of dynalink - jdk/internal/dynalink
. To resolve the problem we have exported the modules in 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>