GraalJS error: Could not initialize class com.oracle.truffle.js.runtime.JSContext

1.3k Views Asked by At

I am trying to use GraalJS inside of an Adobe Experience Manager instance to render React components server side. I am having issues however when attempting to run code using GraalJS. Whenever I run it I am getting an exception being thrown.

org.graalvm.polyglot.PolyglotException: java.lang.NoClassDefFoundError: Could not initialize class com.oracle.truffle.js.runtime.JSContext
at com.oracle.truffle.js.runtime.JSEngine.createContext(JSEngine.java:72) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.js.runtime.JSEngine.createJSContext(JSEngine.java:80) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.js.lang.JavaScriptLanguage.newJSContext(JavaScriptLanguage.java:354) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.js.lang.JavaScriptLanguage.initLanguageContext(JavaScriptLanguage.java:348) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.js.lang.JavaScriptLanguage.createContext(JavaScriptLanguage.java:323) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.js.lang.JavaScriptLanguage.createContext(JavaScriptLanguage.java:113) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.api.LanguageAccessor$LanguageImpl.createEnvContext(LanguageAccessor.java:283) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.polyglot.PolyglotLanguageContext.ensureCreated(PolyglotLanguageContext.java:557) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.polyglot.PolyglotLanguageContext.ensureCreated(PolyglotLanguageContext.java:500) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.polyglot.PolyglotLanguageContext.ensureInitialized(PolyglotLanguageContext.java:642) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.polyglot.PolyglotContextImpl.eval(PolyglotContextImpl.java:1216) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at com.oracle.truffle.polyglot.PolyglotContextDispatch.eval(PolyglotContextDispatch.java:62) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]
at org.graalvm.polyglot.Context.eval(Context.java:379) [xxxxxxxxxxxxx:2.1.0.SNAPSHOT]

This is my code:

try {
    Context engine = Context.create("js");
    Source source = Source.newBuilder("js", script, "<shell>").buildLiteral();
    Value value = engine.eval(source);
    if (value != null) {
        return value.toString();
    }
} catch (Exception e) {
    e.printStackTrace();
}

And I'm running my instance with these JVM arguments:

java -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler
--module-path=~/aem/graalvm/graal-sdk-21.3.0.jar:~/aem/graalvm/truffle-api-21.3.0.jar 
--upgrade-module-path=~/aem/graalvm/compiler-21.3.0.jar:~/aem/graalvm/compiler-management-21.3.0.jar
-cp ~/aem/graalvm/launcher-common-21.3.0.jar:~/aem/graalvm/js-launcher-21.3.0.jar:~/aem/graalvm/js-21.3.0.jar:~/aem/graalvm/truffle-api-21.3.0.jar:~/aem/graalvm/graal-sdk-21.3.0.jar:~/aem/graalvm/js-scriptengine-21.3.0.jar:~/aem/graalvm/regex-21.3.0.jar:~/aem/graalvm/icu4j-70.1.jar
... 

As far as I'm aware all of the required dependencies (including the js library which this class belongs to) are present in my classpath and my project's dependencies. I can run unit tests just fine, I only have this issue when running in an actual AEM instance.

1

There are 1 best solutions below

2
On

I found out what was wrong, turns out I was missing the icu4j dependency and was not importing it in my bundle's <Import-Package> tag.