Open omar391 opened 4 years ago
Hi @omar391 Without a reproducer is hard to tell. But the error seems to be related to class initialization at run-time/build-time. You can get more info about that here: https://github.com/oracle/graal/blob/master/substratevm/ClassInitialization.md
Does the issue occur at build-time or run-time?
@jramirez-isc , Thanks for replying. This issue happens at runtime. There pops several issues at build time if i don't specify "option '--allow-incomplete-classpath', option '--report-unsupported-elements-at-runtime'"
these 2 options. I will see if I can shorten it into a reproducible block. In general, based on my search and readings, it seems, Groovy is not well matched in Graal native image story.
Judging by the name of the class where the error is thrown from this may be a case of missing reflection meta-data. Did you try using the NativeImage agent?
@cstancu, Yes. As you could see in the Gradle task:
task generateConfiguration(type: Exec) {
group = "graal"
description = "Run application to generate the configuration for native image"
dependsOn build
commandLine project.gradle.gradleUserHomeDir.toPath().resolve("caches/com.palantir.graal/$graalVmVersion/$graalJdkLtsVersion/graalvm-ce-java$graalJdkLtsVersion-$graalVmVersion/bin/java"), "-agentlib:native-image-agent=config-output-dir=" + project.buildDir.toPath().resolve("../$configurationFileDirectories"), "-cp", sourceSets.main.runtimeClasspath.getAsPath(), javaMainClass, "-n"
doFirst {
mkdir project.buildDir.toPath().resolve("../$configurationFileDirectories")
}
}
Native image building is too much of a hassle. Now I wonder if it is better to be in Go rather than in Java/Groovy/Kotlin if the native is the end goal.
I get a similar exception trying to use Groovy with Graalvm. I created an example app here https://github.com/codeconsole/gs-rest-service/tree/native-groovy I have no issues with a pure java version https://github.com/codeconsole/gs-rest-service/tree/native-java
% sdk current java
Using java version 22.1.0.r11-grl
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:165)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:252)
at java.io.BufferedInputStream.read(BufferedInputStream.java:271)
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:342)
at java.io.DataInputStream.readUTF(DataInputStream.java:594)
at java.io.DataInputStream.readUTF(DataInputStream.java:569)
at org.codehaus.groovy.reflection.GeneratedMetaMethod$DgmMethodRecord.loadDgmInfo(GeneratedMetaMethod.java:195)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerMethods(MetaClassRegistryImpl.java:199)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:108)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:86)
at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:37)
at org.codehaus.groovy.reflection.ClassInfo.isValidWeakMetaClass(ClassInfo.java:284)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClassForClass(ClassInfo.java:254)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:310)
at com.example.restservice.Greeting.$getStaticMetaClass(Greeting.groovy)
at com.example.restservice.Greeting.<init>(Greeting.groovy)
at com.example.restservice.GreetingController.greeting(GreetingController.java:17)
Steps to Reproduce:
git clone https://github.com/codeconsole/gs-rest-service
cd gs-rest-service
git checkout native-groovy
cd complete
./gradlew nativeRun
Describe the issue The image was generated using the following environments and option. However, not sure how to reproduce the err from a sample code as it get generated from private codes and this whole native code generation is confusing.
Describe GraalVM and your environment:
Gradle config:
Error details