oracle / graal

GraalVM compiles Java applications into native executables that start instantly, scale fast, and use fewer compute resources 🚀
https://www.graalvm.org
Other
20.28k stars 1.63k forks source link

The `--no-fallback` option seems to be quietly enabling `--allow-incomplete-classpath` #4010

Closed jamesward closed 8 months ago

jamesward commented 2 years ago

Describe the issue When I run native-image without --no-fallback on a project that has an incomplete classpath, it falls back (as expected). But when I add the --no-fallback option the build does not fail and the resulting executable fails at runtime.

Steps to reproduce the issue

  1. git clone https://github.com/jamesward/scala3-graalvm-tester.git
  2. cd scala3-graalvm-tester
  3. Run without --no-fallback: ./sbt packageWithFallback
  4. Run with --no-fallback: ./sbt packageWithNoFallback

Describe GraalVM and your environment:

Output when running with --no-fallback

$ ./sbt packageWithNoFallback
[info] welcome to sbt 1.5.5 (GraalVM Community Java 11.0.13)
[info] loading settings for project scala3-graalvm-tester-build from plugins.sbt ...
[info] loading project definition from /home/jamesward/projects/scala3-graalvm-tester/project
[info] loading settings for project scala3-graalvm-tester from build.sbt ...
[info] set current project to scala3-graalvm-tester (in build file:/home/jamesward/projects/scala3-graalvm-tester/)
[warn] there's a key that's not used by any other settings/tasks:
[warn]  
[warn] * scala3-graalvm-tester / packageWithNoFallback / graalVMNativeImageOptions
[warn]   +- /home/jamesward/projects/scala3-graalvm-tester/build.sbt:20
[warn]  
[warn] note: a setting might still be used by a command; to exclude a key from this `lintUnused` check
[warn] either append it to `Global / excludeLintKeys` or call .withRank(KeyRanks.Invisible) on the key
[info] set current project to scala3-graalvm-tester (in build file:/home/jamesward/projects/scala3-graalvm-tester/)
[info] Using existing GraalVM native-image image: ghcr.io-graalvm-graalvm-ce-native-image:21.3.0
[info] Wrote /home/jamesward/projects/scala3-graalvm-tester/target/scala-3.1.0/scala3-graalvm-tester_3-0.1.0-SNAPSHOT.pom
[info] Executing [
[info] /opt/graalvm-ce-java17-21.3.0/bin/java \
[info] -XX:+UseParallelGC \
[info] -XX:+UnlockExperimentalVMOptions \
[info] -XX:+EnableJVMCI \
[info] -Dtruffle.TrustAllTruffleRuntimeProviders=true \
[info] -Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime \
[info] -Dgraalvm.ForcePolyglotInvalid=true \
[info] -Dgraalvm.locatorDisabled=true \
[info] -Dsubstratevm.IgnoreGraalVersionCheck=true \
[info] --add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.access.foreign=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.event=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.loader=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.logger=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.module=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.org.xml.sax.helpers=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.perf=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.platform=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.reflect=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.util.xml.impl=ALL-UNNAMED \
[info] --add-exports=java.base/jdk.internal.util.xml=ALL-UNNAMED \
[info] --add-exports=java.base/sun.invoke.util=ALL-UNNAMED \
[info] --add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
[info] --add-exports=java.base/sun.reflect.annotation=ALL-UNNAMED \
[info] --add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED \
[info] --add-exports=java.base/sun.reflect.generics.repository=ALL-UNNAMED \
[info] --add-exports=java.base/sun.reflect.generics.tree=ALL-UNNAMED \
[info] --add-exports=java.base/sun.security.jca=ALL-UNNAMED \
[info] --add-exports=java.base/sun.security.provider=ALL-UNNAMED \
[info] --add-exports=java.base/sun.security.util=ALL-UNNAMED \
[info] --add-exports=java.base/sun.text.spi=ALL-UNNAMED \
[info] --add-exports=java.base/sun.util.calendar=ALL-UNNAMED \
[info] --add-exports=java.base/sun.util.locale.provider=ALL-UNNAMED \
[info] --add-exports=java.base/sun.util.resources=ALL-UNNAMED \
[info] --add-exports=java.xml.crypto/org.jcp.xml.dsig.internal.dom=ALL-UNNAMED 
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.aarch64=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.amd64=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.site=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.stack=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.common=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.meta=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.runtime=ALL-UNNAMED \
[info] --add-exports=jdk.internal.vm.ci/jdk.vm.ci.services=ALL-UNNAMED \
[info] --add-exports=jdk.jfr/jdk.jfr.events=ALL-UNNAMED \
[info] --add-exports=jdk.jfr/jdk.jfr.internal.consumer=ALL-UNNAMED \
[info] --add-exports=jdk.jfr/jdk.jfr.internal.handlers=ALL-UNNAMED \
[info] --add-exports=jdk.jfr/jdk.jfr.internal.jfc=ALL-UNNAMED \
[info] --add-exports=jdk.jfr/jdk.jfr.internal=ALL-UNNAMED \
[info] -XX:+UseJVMCINativeLibrary \
[info] -Xss10m \
[info] -Xms1g \
[info] -Xmx13233799168 \
[info] -Duser.country=US \
[info] -Duser.language=en \
[info] -Djava.awt.headless=true \
[info] -Dorg.graalvm.version=21.3.0 \
[info] -Dorg.graalvm.config=CE \
[info] -Dcom.oracle.graalvm.isaot=true \
[info] -Djava.system.class.loader=com.oracle.svm.hosted.NativeImageSystemClassLoader \
[info] -Xshare:off \
[info] -Djdk.internal.lambda.disableEagerInitialization=true \
[info] -Djdk.internal.lambda.eagerlyInitialize=false \
[info] -Djava.lang.invoke.InnerClassLambdaMetafactory.initializeLambdas=false \
[info] -javaagent:/opt/graalvm-ce-java17-21.3.0/lib/svm/builder/svm.jar \
[info] -cp \
[info] /opt/graalvm-ce-java17-21.3.0/lib/svm/builder/svm.jar:/opt/graalvm-ce-java17-21.3.0/lib/svm/builder/pointsto.jar:/opt/graalvm-ce-java17-21.3.0/lib/svm/builder/javacpp-shadowed.jar:/opt/graalvm-ce-java17-21.3.0/lib/svm/builder/svm-llvm.jar:/opt/graalvm-ce-java17-21.3.0/lib/svm/builder/objectfile.jar:/opt/graalvm-ce-java17-21.3.0/lib/svm/builder/llvm-wrapper-shadowed.jar:/opt/graalvm-ce-java17-21.3.0/lib/svm/builder/llvm-platform-specific-shadowed.jar \
[info] --module-path \
[info] /opt/graalvm-ce-java17-21.3.0/lib/truffle/truffle-api.jar \
[info] 'com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus' \
[info] -watchpid \
[info] 1 \
[info] -imagecp \
[info] /opt/graalvm/stage/lib/default.scala3-graalvm-tester-0.1.0-SNAPSHOT.jar:/opt/graalvm/stage/lib/org.scala-lang.scala3-library_3-3.1.0.jar:/opt/graalvm/stage/lib/org.scala-lang.scala-library-2.13.6.jar:/opt/graalvm-ce-java17-21.3.0/lib/svm/library-support.jar \
[info] -H:Path=/opt/graalvm \
[info] -H:Name=scala3-graalvm-tester \
[info] -H:+DumpTargetInfo \
[info] -H:FallbackThreshold=0 \
[info] -H:CLibraryPath=/opt/graalvm-ce-java17-21.3.0/lib/svm/clibraries/linux-amd64 \
[info] '-H:Class@explicit main-class=run'
[info] ]
[info] [scala3-graalvm-tester:27]    classlist:   3,275.07 ms,  0.96 GB
[info] [scala3-graalvm-tester:27]        (cap):   1,394.73 ms,  0.96 GB
[info] [scala3-graalvm-tester:27]        setup:   4,869.37 ms,  0.96 GB
[info] # Printing compilation-target information to: /opt/graalvm/reports/target_info_20211112_175146.txt
[info] [scala3-graalvm-tester:27]     (clinit):     241.79 ms,  2.29 GB
[info] # Printing native-library information to: /opt/graalvm/reports/native_library_info_20211112_175206.txt
[info] [scala3-graalvm-tester:27]   (typeflow):   6,561.07 ms,  2.29 GB
[info] [scala3-graalvm-tester:27]    (objects):  10,337.41 ms,  2.29 GB
[info] [scala3-graalvm-tester:27]   (features):   2,314.63 ms,  2.29 GB
[info] [scala3-graalvm-tester:27]     analysis:  20,125.19 ms,  2.29 GB
[info] [scala3-graalvm-tester:27]     universe:   1,108.06 ms,  2.29 GB
[info] [scala3-graalvm-tester:27]      (parse):   1,346.78 ms,  2.30 GB
[info] [scala3-graalvm-tester:27]     (inline):   1,300.26 ms,  2.30 GB
[info] [scala3-graalvm-tester:27]    (compile):  18,270.58 ms,  4.07 GB
[info] [scala3-graalvm-tester:27]      compile:  22,515.95 ms,  4.07 GB
[info] [scala3-graalvm-tester:27]        image:   1,925.68 ms,  4.46 GB
[info] [scala3-graalvm-tester:27]        write:     278.27 ms,  4.46 GB
[info] [scala3-graalvm-tester:27]      [total]:  54,614.75 ms,  4.46 GB
[info] # Printing build artifacts to: /opt/graalvm/scala3-graalvm-tester.build_artifacts.txt
[success] Total time: 58 s, completed Nov 12, 2021, 10:52:33 AM
munishchouhan commented 2 years ago

@jamesward thanks for reporting the issue, we will check it out and get back to you

munishchouhan commented 2 years ago

@jamesward Getting error while using reproducer am I missing something?


 ./sbt packageWithFallback
[info] welcome to sbt 1.5.5 (GraalVM Community Java 11.0.13)
[info] loading settings for project scala3-graalvm-tester-build from plugins.sbt ...
[info] loading project definition from /home/munish/github/4010/scala3-graalvm-tester/project
[info] loading settings for project scala3-graalvm-tester from build.sbt ...
[info] set current project to scala3-graalvm-tester (in build file:/home/munish/github/4010/scala3-graalvm-tester/)
[warn] there's a key that's not used by any other settings/tasks:
[warn]
[warn] * scala3-graalvm-tester / packageWithNoFallback / graalVMNativeImageOptions
[warn]   +- /home/munish/github/4010/scala3-graalvm-tester/build.sbt:19
[warn]
[warn] note: a setting might still be used by a command; to exclude a key from this `lintUnused` check
[warn] either append it to `Global / excludeLintKeys` or call .withRank(KeyRanks.Invisible) on the key
[info] Wrote /home/munish/github/4010/scala3-graalvm-tester/target/scala-3.1.0/scala3-graalvm-tester_3-0.1.0-SNAPSHOT.pom
[info] Main Scala API documentation to /home/munish/github/4010/scala3-graalvm-tester/target/scala-3.1.0/api...
[info] Main Scala API documentation successful.
[error] java.lang.RuntimeException: Nonzero exit value: 1
[error]         at scala.sys.package$.error(package.scala:30)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.slurp(ProcessBuilderImpl.scala:138)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.$bang$bang(ProcessBuilderImpl.scala:108)
[error]         at com.typesafe.sbt.packager.graalvmnativeimage.GraalVMNativeImagePlugin$.$anonfun$generateContainerBuildImage$1(GraalVMNativeImagePlugin.scala:173)
[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:68)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error]         at sbt.Execute.work(Execute.scala:291)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[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:829)
[error] (Graalvm-native-image / containerBuildImage) Nonzero exit value: 1
[error] Total time: 7 s, completed Nov 22, 2021, 3:14:56 PM
jamesward commented 2 years ago

Well that is not a useful error. Under the covers this task calls docker. Maybe you don't have docker installed?

oubidar-Abderrahim commented 8 months ago

If this issue is still relevant in the latest GraalVM versions, please create a new issue for it and follow the template provided. Thank you