Skip to content

Errors trying to create native image that uses groovy version 2.4.21 #4484

@hectorhuol

Description

@hectorhuol

Describe the issue
I am having issues using the functionality from groovy version 2.4.21. I am able to generate the reflect-config.json using the trace agent, and I am able to generate the native image with the native-image but when using the native image, I am getting the next error:

Exception in thread "main" com.oracle.svm.core.jdk.UnsupportedFeatureError: No classes have been predefined during the image build to load from bytecodes at runtime.
        at com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:87)
        at com.oracle.svm.core.hub.PredefinedClassesSupport.throwNoBytecodeClasses(PredefinedClassesSupport.java:76)
        at com.oracle.svm.core.hub.PredefinedClassesSupport.loadClass(PredefinedClassesSupport.java:130)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:269)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.define(ClassLoaderForClassArtifacts.java:43)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts$1.run(ClassLoaderForClassArtifacts.java:76)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts$1.run(ClassLoaderForClassArtifacts.java:74)
        at java.security.AccessController.doPrivileged(AccessController.java:87)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.defineClassAndGetConstructor(ClassLoaderForClassArtifacts.java:74)
        at org.codehaus.groovy.runtime.callsite.CallSiteGenerator.compilePojoMethod(CallSiteGenerator.java:250)
        at org.codehaus.groovy.reflection.CachedMethod.createPojoMetaMethodSite(CachedMethod.java:267)
        at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.createCachedMethodSite(PojoMetaMethodSite.java:162)
        at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.createPojoMetaMethodSite(PojoMetaMethodSite.java:151)
        at groovy.lang.MetaClassImpl.createPojoCallSite(MetaClassImpl.java:3408)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:131)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:165)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
        at org.codehaus.groovy.ast.builder.AstBuilder.buildFromString(AstBuilder.groovy:102)
        at org.codehaus.groovy.ast.builder.AstBuilder.buildFromString(AstBuilder.groovy)
        at HelloWorld.main(HelloWorld.java:20)

You can get the code I am using for testing from here: https://github.com/hectorhuol/test-graalvm-groovy

Steps to reproduce the issue
Please include both build steps as well as run steps

  1. Compile the HelloWorld.java class: javac -cp groovy-2.4.21.jar HelloWorld.java
  2. Run tracing agent to generate configuration: java -agentlib:native-image-agent=config-output-dir=META-INF/native-image -cp .;groovy-2.4.21.jar HelloWorld
  3. Generate the native image: native-image --no-fallback --allow-incomplete-classpath --report-unsupported-elements-at-runtime --native-image-info --verbose -cp .;groovy-2.4.21.jar HelloWorld hello-world
  4. Run the native image: hello-world.exe

Describe GraalVM and your environment:

  • GraalVM version:
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment GraalVM CE 21.3.0 (build 11.0.13+7-jvmci-21.3-b05)
OpenJDK 64-Bit Server VM GraalVM CE 21.3.0 (build 11.0.13+7-jvmci-21.3-b05, mixed mode, sharing)
  • JDK major version: 11
  • OS: Windows
  • Architecture: AMD64

More details
Here is the output when generating the native image:

Apply file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/jni-config.json
Apply file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/reflect-config.json
Apply file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/resource-config.json
Apply file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/proxy-config.json
Apply file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/serialization-config.json
Apply file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/predefined-classes-config.json
Executing [
'C:\Program Files\Java\graalvm-ce-java11-21.3.0\bin\java.exe' \
-XX:+UseParallelGC \
-XX:+UnlockExperimentalVMOptions \
-XX:+EnableJVMCI \
-Dtruffle.TrustAllTruffleRuntimeProviders=true \
-Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime \
-Dgraalvm.ForcePolyglotInvalid=true \
-Dgraalvm.locatorDisabled=true \
-Dsubstratevm.IgnoreGraalVersionCheck=true \
--add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.event=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.loader=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.logger=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.module=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.org.xml.sax.helpers=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.perf=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.reflect=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.util.xml.impl=ALL-UNNAMED \
--add-exports=java.base/jdk.internal.util.xml=ALL-UNNAMED \
--add-exports=java.base/sun.invoke.util=ALL-UNNAMED \
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
--add-exports=java.base/sun.reflect.annotation=ALL-UNNAMED \
--add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED \
--add-exports=java.base/sun.reflect.generics.repository=ALL-UNNAMED \
--add-exports=java.base/sun.reflect.generics.tree=ALL-UNNAMED \
--add-exports=java.base/sun.security.jca=ALL-UNNAMED \
--add-exports=java.base/sun.security.provider=ALL-UNNAMED \
--add-exports=java.base/sun.security.util=ALL-UNNAMED \
--add-exports=java.base/sun.text.spi=ALL-UNNAMED \
--add-exports=java.base/sun.util.calendar=ALL-UNNAMED \
--add-exports=java.base/sun.util.locale.provider=ALL-UNNAMED \
--add-exports=java.base/sun.util.resources=ALL-UNNAMED \
--add-exports=java.xml.crypto/org.jcp.xml.dsig.internal.dom=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.aarch64=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.amd64=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.site=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.stack=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.common=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.sparc=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.meta=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.runtime=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.services=ALL-UNNAMED \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.sparc=ALL-UNNAMED \
--add-exports=jdk.jfr/jdk.jfr.events=ALL-UNNAMED \
--add-exports=jdk.jfr/jdk.jfr.internal.consumer=ALL-UNNAMED \
--add-exports=jdk.jfr/jdk.jfr.internal.handlers=ALL-UNNAMED \
--add-exports=jdk.jfr/jdk.jfr.internal.jfc=ALL-UNNAMED \
--add-exports=jdk.jfr/jdk.jfr.internal=ALL-UNNAMED \
-XX:+UseJVMCINativeLibrary \
-Xss10m \
-Xms1g \
-Xmx14g \
-Duser.country=US \
-Duser.language=en \
-Djava.awt.headless=true \
-Dorg.graalvm.version=21.3.0 \
-Dorg.graalvm.config=CE \
-Dcom.oracle.graalvm.isaot=true \
-Djava.system.class.loader=com.oracle.svm.hosted.NativeImageSystemClassLoader \
-Xshare:off \
-Djdk.internal.lambda.disableEagerInitialization=true \
-Djdk.internal.lambda.eagerlyInitialize=false \
-Djava.lang.invoke.InnerClassLambdaMetafactory.initializeLambdas=false \
'-javaagent:C:\Program Files\Java\graalvm-ce-java11-21.3.0\lib\svm\builder\svm.jar' \
-cp \
'C:\Program Files\Java\graalvm-ce-java11-21.3.0\lib\svm\builder\objectfile.jar;C:\Program Files\Java\graalvm-ce-java11-21.3.0\lib\svm\builder\pointsto.jar;C:\Program Files\Java\graalvm-ce-java11-21.3.0\lib\svm\builder\svm.jar' \
--module-path \
'C:\Program Files\Java\graalvm-ce-java11-21.3.0\lib\truffle\truffle-api.jar' \
'com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus' \
-imagecp \
'C:\Users\hedah\Documents\Workspace\Tests\test-graalvm-groovy;C:\Users\hedah\Documents\Workspace\Tests\test-graalvm-groovy\groovy-2.4.21.jar;C:\Program Files\Java\graalvm-ce-java11-21.3.0\lib\svm\library-support.jar' \
'-H:Path=C:\Users\hedah\Documents\Workspace\Tests\test-graalvm-groovy' \
-H:FallbackThreshold=0 \
-H:+AllowIncompleteClasspath \
-H:+ReportUnsupportedElementsAtRuntime \
-H:+DumpTargetInfo \
'-H:JNIConfigurationResources@file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/jni-config.json=META-INF\native-image\jni-config.json' \
'-H:ReflectionConfigurationResources@file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/reflect-config.json=META-INF\native-image\reflect-config.json' \
'-H:ResourceConfigurationResources@file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/resource-config.json=META-INF\native-image\resource-config.json' \
'-H:DynamicProxyConfigurationResources@file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/proxy-config.json=META-INF\native-image\proxy-config.json' \ '-H:SerializationConfigurationResources@file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/serialization-config.json=META-INF\native-image\serialization-config.json' \
'-H:PredefinedClassesConfigurationResources@file:///C:/Users/hedah/Documents/Workspace/Tests/test-graalvm-groovy/META-INF/native-image/predefined-classes-config.json=META-INF\native-image\predefined-classes-config.json' \
'-H:CLibraryPath=C:\Program Files\Java\graalvm-ce-java11-21.3.0\lib\svm\clibraries\windows-amd64' \
'-H:Class@explicit main-class=HelloWorld' \
'-H:Name@explicit image name=hello-world'
]
[hello-world:29684]    classlist:   1,482.46 ms,  0.96 GB
[hello-world:29684]        (cap):   1,989.62 ms,  0.96 GB
Warning: Could not resolve groovy.lang.GroovyCodeSource$getName for reflection configuration. Reason: java.lang.ClassNotFoundException: groovy.lang.GroovyCodeSource$getName.
Warning: Could not resolve java_lang_String$trim for reflection configuration. Reason: java.lang.ClassNotFoundException: java_lang_String$trim.
Warning: Could not resolve java_lang_System$currentTimeMillis for reflection configuration. Reason: java.lang.ClassNotFoundException: java_lang_System$currentTimeMillis.
Warning: Could not resolve java_util_List$add for reflection configuration. Reason: java.lang.ClassNotFoundException: java_util_List$add.
Warning: Could not resolve org.codehaus.groovy.control.CompilationUnit$addSource for reflection configuration. Reason: java.lang.ClassNotFoundException: org.codehaus.groovy.control.CompilationUnit$addSource.
Warning: Could not resolve org.codehaus.groovy.control.CompilationUnit$compile$0 for reflection configuration. Reason: java.lang.ClassNotFoundException: org.codehaus.groovy.control.CompilationUnit$compile$0.
Warning: Could not resolve org.codehaus.groovy.control.CompilePhase$getPhaseNumber for reflection configuration. Reason: java.lang.ClassNotFoundException: org.codehaus.groovy.control.CompilePhase$getPhaseNumber.
[hello-world:29684]        setup:   3,731.03 ms,  0.96 GB
# Printing compilation-target information to: C:\Users\hedah\Documents\Workspace\Tests\test-graalvm-groovy\reports\target_info_20220411_125827.txt
[hello-world:29684]     (clinit):     237.59 ms,  2.58 GB
# Printing native-library information to: C:\Users\hedah\Documents\Workspace\Tests\test-graalvm-groovy\reports\native_library_info_20220411_125840.txt
[hello-world:29684]   (typeflow):   3,706.46 ms,  2.58 GB
[hello-world:29684]    (objects):   4,609.01 ms,  2.58 GB
[hello-world:29684]   (features):   3,969.63 ms,  2.58 GB
[hello-world:29684]     analysis:  13,143.69 ms,  2.58 GB
[hello-world:29684]     universe:   1,009.03 ms,  3.00 GB
[hello-world:29684]      (parse):     582.90 ms,  3.00 GB
[hello-world:29684]     (inline):     862.65 ms,  2.96 GB
[hello-world:29684]    (compile):   8,102.01 ms,  3.32 GB
[hello-world:29684]      compile:  10,635.07 ms,  3.32 GB
[hello-world:29684]        image:   1,327.43 ms,  3.32 GB
[hello-world:29684]        write:     504.94 ms,  3.32 GB
[hello-world:29684]      [total]:  32,041.88 ms,  3.32 GB
# Printing build artifacts to: C:\Users\hedah\Documents\Workspace\Tests\test-graalvm-groovy\hello-world.build_artifacts.txt

Here is again the error I get when running the native image:

Exception in thread "main" com.oracle.svm.core.jdk.UnsupportedFeatureError: No classes have been predefined during the image build to load from bytecodes at runtime.
        at com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:87)
        at com.oracle.svm.core.hub.PredefinedClassesSupport.throwNoBytecodeClasses(PredefinedClassesSupport.java:76)
        at com.oracle.svm.core.hub.PredefinedClassesSupport.loadClass(PredefinedClassesSupport.java:130)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:269)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.define(ClassLoaderForClassArtifacts.java:43)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts$1.run(ClassLoaderForClassArtifacts.java:76)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts$1.run(ClassLoaderForClassArtifacts.java:74)
        at java.security.AccessController.doPrivileged(AccessController.java:87)
        at org.codehaus.groovy.reflection.ClassLoaderForClassArtifacts.defineClassAndGetConstructor(ClassLoaderForClassArtifacts.java:74)
        at org.codehaus.groovy.runtime.callsite.CallSiteGenerator.compilePojoMethod(CallSiteGenerator.java:250)
        at org.codehaus.groovy.reflection.CachedMethod.createPojoMetaMethodSite(CachedMethod.java:267)
        at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.createCachedMethodSite(PojoMetaMethodSite.java:162)
        at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.createPojoMetaMethodSite(PojoMetaMethodSite.java:151)
        at groovy.lang.MetaClassImpl.createPojoCallSite(MetaClassImpl.java:3408)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:131)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:165)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
        at org.codehaus.groovy.ast.builder.AstBuilder.buildFromString(AstBuilder.groovy:102)
        at org.codehaus.groovy.ast.builder.AstBuilder.buildFromString(AstBuilder.groovy)
        at HelloWorld.main(HelloWorld.java:20)

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions