Skip to content

native-image: fails to create image when --language:js is included. #589

Closed
@renatoathaydes

Description

@renatoathaydes

I have a small Java project that tries to run a JS script.
I coded it against the old ScriptManager API and it works when running with HotSpot/Nashorn.

It also seems to work fine when I compile and run using GraalVM like a normal JVM.

./gradlew clean jar
java -Dpolyglot.js.nashorn-compat=true -jar build/libs/rawhttp-scraper-1.0-SNAPSHOT.jar samples/requests/get-speakers samples/js/parseJson.js

Now, when I try to create a native image including the JS environment, it does not work:

native-image --language:js -jar build/libs/rawhttp-scraper-1.0-SNAPSHOT.jar

Error:

Build on Server(pid: 58707, port: 52955)
   classlist:     842.15 ms
       (cap):   1,184.43 ms
       setup:   1,778.32 ms
    analysis:   1,104.00 ms
fatal error: java.lang.NoClassDefFoundError: Could not initialize class rawhttp.core.RawHttpOptions
	at sun.misc.Unsafe.ensureClassInitialized(Native Method)
	at jdk.vm.ci.hotspot.HotSpotResolvedObjectTypeImpl.initialize(HotSpotResolvedObjectTypeImpl.java:382)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.createType(AnalysisUniverse.java:213)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookupAllowUnresolved(AnalysisUniverse.java:193)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:170)
	at com.oracle.graal.pointsto.meta.AnalysisField.<init>(AnalysisField.java:104)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.createField(AnalysisUniverse.java:357)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookupAllowUnresolved(AnalysisUniverse.java:345)
	at com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:312)
	at com.oracle.graal.pointsto.meta.AnalysisType.convertFields(AnalysisType.java:857)
	at com.oracle.graal.pointsto.meta.AnalysisType.convertInstanceFields(AnalysisType.java:850)
	at com.oracle.graal.pointsto.meta.AnalysisType.getInstanceFields(AnalysisType.java:841)
	at com.oracle.graal.pointsto.flow.context.object.AnalysisObject.getInstanceFieldTypeStore(AnalysisObject.java:209)
	at com.oracle.graal.pointsto.flow.context.object.AnalysisObject.getInstanceFieldFlow(AnalysisObject.java:199)
	at com.oracle.graal.pointsto.flow.LoadFieldTypeFlow$LoadInstanceFieldTypeFlow.onObservedUpdate(LoadFieldTypeFlow.java:159)
	at com.oracle.graal.pointsto.flow.TypeFlow.notifyObservers(TypeFlow.java:347)
	at com.oracle.graal.pointsto.flow.TypeFlow.update(TypeFlow.java:389)
	at com.oracle.graal.pointsto.BigBang$2.run(BigBang.java:500)
	at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:174)
	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error: Processing image build request failed

If I do not include the --language:js argument, it creates the image, but then it does not find the JS script engine.

Is there something I can do to work around the problem for now, or I will have to wait for a bug fix?

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions