Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GraalVM polyglot Context is not working in custom JRE(JLink) environment #3339

Closed
dkovalenko opened this issue Apr 12, 2021 · 5 comments
Closed
Assignees

Comments

@dkovalenko
Copy link

Describe the issue
I try to bundle my custom graalvm jre using jlink tool.

  • When i use GraalVM 21.0.0.2.r11 i have error during jlink run:
    Error: Hash of java.rmi (bb68a77816d9b03846e06607d7addb24e4ba4dc568898cd97cf21a6547ddfe38) differs to expected hash (31d47a2989873e5fef34bd4481f1bfd864ce36085263a738b2f958244ecccc47) recorded in java.base
  • When i use GraalVM 20.0.0.r11 I have error in runtime:
    Unexpected exception[RuntimeException: java.lang.NoClassDefFoundError: org/graalvm/polyglot/Context]

Steps to reproduce the issue

  1. git clone https://github.com/dkovalenko/play-scala-graalvm-jlink
  2. sbt runProd
  3. Go to http://localhost:9000/graal

Describe GraalVM and your environment:

  • JDK major version: GraalVM 21.0.0.2.r11, GraalVM 20.0.0.r11
  • OS: macOS Big Sur 11.2.3
  • Architecture: AMD64

More details

  • AdoptOpenJDK 11.0.9.hs: Build ok. Application is working properly.

  • GraalVM 21.0.0.2.r11: Build error:

[info] Running: jlink --output /Users/dmitriy/projects/scala/play-scala-graalvm-jlink/target/jlink/output --add-modules java.logging,java.management,java.naming,java.compiler,jdk.jfr,java.base,java.desktop,java.transaction.xa,java.rmi,java.sql,java.datatransfer,java.xml,jdk.crypto.ec,jdk.unsupported,jdk.jdwp.agent --module-path /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/thoughtworks/paranamer/paranamer/2.8/paranamer-2.8.jar --no-header-files --no-man-pages --compress=2
[info] Error: Hash of java.rmi (bb68a77816d9b03846e06607d7addb24e4ba4dc568898cd97cf21a6547ddfe38) differs to expected hash (31d47a2989873e5fef34bd4481f1bfd864ce36085263a738b2f958244ecccc47) recorded in java.base
[error] java.lang.RuntimeException: Nonzero exit value: 1
[error]         at scala.sys.package$.error(package.scala:30)
[error]         at com.typesafe.sbt.packager.archetypes.jlink.JlinkPlugin$.runForOutput(JlinkPlugin.scala:232)
[error]         at com.typesafe.sbt.packager.archetypes.jlink.JlinkPlugin$.$anonfun$runJavaTool$2(JlinkPlugin.scala:217)
[error]         at sbt.io.IO$.withTemporaryFile(IO.scala:533)
[error]         at sbt.io.IO$.withTemporaryFile(IO.scala:543)
[error]         at com.typesafe.sbt.packager.archetypes.jlink.JlinkPlugin$.runJavaTool(JlinkPlugin.scala:211)
[error]         at com.typesafe.sbt.packager.archetypes.jlink.JlinkPlugin$.$anonfun$projectSettings$28(JlinkPlugin.scala:164)
[error]         at com.typesafe.sbt.packager.archetypes.jlink.JlinkPlugin$.$anonfun$projectSettings$26(JlinkPlugin.scala:169)
[error]         at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error]         at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error]         at sbt.std.Transform$$anon$4.work(Transform.scala:67)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:281)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19)
[error]         at sbt.Execute.work(Execute.scala:290)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:281)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]         at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error]         at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[error]         at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error]         at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[error]         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[error]         at java.base/java.lang.Thread.run(Thread.java:834)
[error] (jlinkBuildImage) Nonzero exit value: 1

Looks similar to this bug: adoptium/aqa-tests#1293

  • GraalVM 20.0.0.r11: Build ok. When you run app there is an error:
  ! @7jbfo42on - Internal server error, for (GET) [/graal] ->
 
play.api.UnexpectedException: Unexpected exception[RuntimeException: java.lang.NoClassDefFoundError: org/graalvm/polyglot/Context]
        at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:358)
        at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:264)
        at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:430)
        at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:422)
        at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:454)
        at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:63)
        at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:100)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
        at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:94)
        at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:100)
        at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:49)
        at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:48)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/graalvm/polyglot/Context
        at play.api.mvc.ActionBuilder$$anon$9.apply(Action.scala:384)
        at play.api.mvc.Action.$anonfun$apply$4(Action.scala:82)
        at play.api.libs.streams.StrictAccumulator.$anonfun$mapFuture$4(Accumulator.scala:168)
        at scala.util.Try$.apply(Try.scala:210)
        at play.api.libs.streams.StrictAccumulator.$anonfun$mapFuture$3(Accumulator.scala:168)
        at scala.Function1.$anonfun$andThen$1(Function1.scala:85)
        at scala.Function1.$anonfun$andThen$1(Function1.scala:85)
        at play.api.libs.streams.StrictAccumulator.run(Accumulator.scala:199)
        at play.core.server.AkkaHttpServer.$anonfun$runAction$4(AkkaHttpServer.scala:417)
        at akka.http.scaladsl.util.FastFuture$.strictTransform$1(FastFuture.scala:41)
        at akka.http.scaladsl.util.FastFuture$.$anonfun$transformWith$3(FastFuture.scala:51)
        at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:448)
        ... 12 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/graalvm/polyglot/Context
        at controllers.HomeController.$anonfun$indexGraal$1(HomeController.scala:36)
        at play.api.mvc.ActionBuilderImpl.invokeBlock(Action.scala:441)
        at play.api.mvc.ActionBuilderImpl.invokeBlock(Action.scala:439)
        at play.api.mvc.ActionBuilder$$anon$9.apply(Action.scala:379)
        ... 23 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.graalvm.polyglot.Context
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        ... 27 common frames omitted
@dkovalenko dkovalenko added the bug label Apr 12, 2021
@oubidar-Abderrahim oubidar-Abderrahim self-assigned this Apr 15, 2021
@dkovalenko
Copy link
Author

Seems like project is missing some modules during jlink - so resulting JRE misses crucial modules to make polyglot context work.

jlinkModules ++= Seq(
  "jdk.crypto.ec",
  "jdk.unsupported",
  "jdk.jdwp.agent"
)

I think I need to add some more modules to make org/graalvm/polyglot/Context work, I just don't know which ones.

@dkovalenko
Copy link
Author

dkovalenko commented Apr 20, 2021

If I change jlinkModules to this:

jlinkModules ++= Seq(
  "jdk.crypto.ec",
  "jdk.unsupported",
  "jdk.jdwp.agent",
  "org.graalvm.truffle",
  "jdk.internal.vm.ci",
  "jdk.internal.vm.compiler",
)

in runtime I get another exception:

play.api.UnexpectedException: Unexpected exception[PolyglotIllegalArgumentException: A language with id 'js' is not installed. Installed languages are: [].]
        at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:358)
        at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:264)
        at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:430)
        at play.core.server.AkkaHttpServer$$anonfun$2.applyOrElse(AkkaHttpServer.scala:422)
        at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:454)
        at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:63)
        at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:100)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
        at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:94)
        at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:100)
        at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:49)
        at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:48)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: com.oracle.truffle.polyglot.PolyglotIllegalArgumentException: A language with id 'js' is not installed. Installed languages are: [].
        at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotEngineImpl.requirePublicLanguage(PolyglotEngineImpl.java:858)
        at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotContextImpl.requirePublicLanguage(PolyglotContextImpl.java:843)
        at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotContextImpl.eval(PolyglotContextImpl.java:814)
        at org.graalvm.sdk/org.graalvm.polyglot.Context.eval(Context.java:345)
        at org.graalvm.sdk/org.graalvm.polyglot.Context.eval(Context.java:371)
        at controllers.HomeController.$anonfun$indexGraal$1(HomeController.scala:41)
        at play.api.mvc.ActionBuilderImpl.invokeBlock(Action.scala:441)
        at play.api.mvc.ActionBuilderImpl.invokeBlock(Action.scala:439)
        at play.api.mvc.ActionBuilder$$anon$9.apply(Action.scala:379)
        at play.api.mvc.Action.$anonfun$apply$4(Action.scala:82)
        at play.api.libs.streams.StrictAccumulator.$anonfun$mapFuture$4(Accumulator.scala:168)
        at scala.util.Try$.apply(Try.scala:210)
        at play.api.libs.streams.StrictAccumulator.$anonfun$mapFuture$3(Accumulator.scala:168)
        at scala.Function1.$anonfun$andThen$1(Function1.scala:85)
        at scala.Function1.$anonfun$andThen$1(Function1.scala:85)
        at scala.Function1.$anonfun$andThen$1(Function1.scala:85)
        at play.api.libs.streams.StrictAccumulator.run(Accumulator.scala:199)
        at play.core.server.AkkaHttpServer.$anonfun$runAction$4(AkkaHttpServer.scala:417)
        at akka.http.scaladsl.util.FastFuture$.strictTransform$1(FastFuture.scala:41)
        at akka.http.scaladsl.util.FastFuture$.$anonfun$transformWith$3(FastFuture.scala:51)
        at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:448)
        ... 12 common frames omitted

If I add "org.graalvm.js" % "js" to dependencies I get this error during jdeps phase:

[info] Running: jdeps --multi-release 11 --module-path /Users/dmitriy/projects/scala/play-scala-graalvm-jlink/target/scala-2.13/classes:/Users/dmitriy/projects/scala/play-scala-graalvm-jlink/target/web/classes/main:/Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/graalvm/js/js/21.0.0.2/js-21.0.0.2.jar:/Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/graalvm/regex/regex/21.0.0.2/regex-21.0.0.2.jar:/Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/graalvm/truffle/truffle-api/21.0.0.2/truffle-api-21.0.0.2.jar:/Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/graalvm/sdk/graal-sdk/21.0.0.2/graal-sdk-21.0.0.2.jar:/Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/ibm/icu/icu4j/67.1/icu4j-67.1.jar:/Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/thoughtworks/paranamer/paranamer/2.8/paranamer-2.8.jar -R /Users/dmitriy/projects/scala/play-scala-graalvm-jlink/target/scala-2.13/classes /Users/dmitriy/projects/scala/play-scala-graalvm-jlink/target/web/classes/main /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.5/scala-library-2.13.5.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/twirl-api_2.13/1.5.1/twirl-api_2.13-1.5.1.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-server_2.13/2.8.8/play-server_2.13-2.8.8.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-logback_2.13/2.8.8/play-logback_2.13-2.8.8.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-akka-http-server_2.13/2.8.8/play-akka-http-server_2.13-2.8.8.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/filters-helpers_2.13/2.8.8/filters-helpers_2.13-2.8.8.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-guice_2.13/2.8.8/play-guice_2.13-2.8.8.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/graalvm/js/js/21.0.0.2/js-21.0.0.2.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.13/1.2.0/scala-xml_2.13-1.2.0.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play_2.13/2.8.8/play_2.13-2.8.8.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-streams_2.13/2.8.8/play-streams_2.13-2.8.8.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-http-core_2.13/10.1.14/akka-http-core_2.13-10.1.14.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/inject/guice/4.2.3/guice-4.2.3.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/inject/extensions/guice-assistedinject/4.2.3/guice-assistedinject-4.2.3.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/graalvm/regex/regex/21.0.0.2/regex-21.0.0.2.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/graalvm/truffle/truffle-api/21.0.0.2/truffle-api-21.0.0.2.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/graalvm/sdk/graal-sdk/21.0.0.2/graal-sdk-21.0.0.2.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/ibm/icu/icu4j/67.1/icu4j-67.1.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/build-link/2.8.8/build-link-2.8.8.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/slf4j/jcl-over-slf4j/1.7.30/jcl-over-slf4j-1.7.30.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-actor_2.13/2.6.14/akka-actor_2.13-2.6.14.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-actor-typed_2.13/2.6.14/akka-actor-typed_2.13-2.6.14.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-slf4j_2.13/2.6.14/akka-slf4j_2.13-2.6.14.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-serialization-jackson_2.13/2.6.14/akka-serialization-jackson_2.13-2.6.14.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.11.4/jackson-core-2.11.4.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.11.4/jackson-annotations-2.11.4.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.4/jackson-datatype-jdk8-2.11.4.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.4/jackson-datatype-jsr310-2.11.4.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.11.4/jackson-databind-2.11.4.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-json_2.13/2.8.1/play-json_2.13-2.8.1.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/guava/guava/28.2-jre/guava-28.2-jre.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/jsonwebtoken/jjwt/0.9.1/jjwt-0.9.1.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/jakarta/transaction/jakarta.transaction-api/1.3.3/jakarta.transaction-api-1.3.3.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/javax/inject/javax.inject/1/javax.inject-1.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-java8-compat_2.13/0.9.1/scala-java8-compat_2.13-0.9.1.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/ssl-config-core_2.13/0.4.2/ssl-config-core_2.13-0.4.2.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-parser-combinators_2.13/1.1.2/scala-parser-combinators_2.13-1.1.2.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-stream_2.13/2.6.14/akka-stream_2.13-2.6.14.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-parsing_2.13/10.1.14/akka-parsing_2.13-10.1.14.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-exceptions/2.8.8/play-exceptions-2.8.8.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/config/1.4.0/config-1.4.0.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-scala_2.13/2.11.4/jackson-module-scala_2.13-2.11.4.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.11.4/jackson-dataformat-cbor-2.11.4.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/lz4/lz4-java/1.7.1/lz4-java-1.7.1.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-functional_2.13/2.8.1/play-functional_2.13-2.8.1.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.5/scala-reflect-2.13.5.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/joda-time/joda-time/2.10.5/joda-time-2.10.5.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api/1.2.2/jakarta.activation-api-1.2.2.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-protobuf-v3_2.13/2.6.14/akka-protobuf-v3_2.13-2.6.14.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-paranamer/2.11.4/jackson-module-paranamer-2.11.4.jar /Users/dmitriy/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/thoughtworks/paranamer/paranamer/2.8/paranamer-2.8.jar

[info] Error: Module com.oracle.truffle.regex does not read a module that exports com.oracle.truffle.api

What really will help me - example of working java application with jlink plugin(maven or gradle). Maybe all problem is that sbt jlink plugin is not suited to build graalvm custom JRE yet.

@oubidar-Abderrahim
Copy link
Member

@dougxc would you mind taking a look at this advice on what should be done? Thanks

@dougxc
Copy link
Member

dougxc commented May 12, 2021

Using jlink from GraalVM is a known issue: https://bugs.openjdk.java.net/browse/JDK-8237467
It's something we plan to address but cannot provide a timeline yet.
Native Image is the preferred solution for packaging applications that use GraalVM. Maybe that works for your use case.

@dkovalenko
Copy link
Author

After lots of experiments, I have a working solution for the problem! Added some modules in the project https://github.com/dkovalenko/play-scala-graalvm-jlink

The idea is to build custom JRE with proper modules using GraalVM and then run an application with that JRE and add
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler params.

In this case, GraalVMs jvmci is used and we can have a small JRE size + the ability to use all GraalVMs benefits, including JS engine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants