Closed jerboaa closed 10 months ago
Related #184
As per https://github.com/oracle/graal/issues/7354 -H:IncludeResources
shouldn't be used. See https://github.com/oracle/graal/issues/7354#issuecomment-1707965060 for a replacement.
Reproducer:
export JAVA_HOME=/path/to/mandrel
export GRAALVM_HOME=$JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH
mvn clean verify -Dquarkus.version=999-SNAPSHOT -Ptestsuite -Dtest=AppReproducersTest#imageioAWTTest
Interestingly, the extra resources config is being generated by the agent run the test already does:
java -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image -jar target/imageio.jar
That generates the appropriate resource-config.json
that is then being picked up by the native-image build. So we don't need -H:IncludeResources
at all with GraalVM 22.3+.
For example:
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/jni-config.json
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/reflect-config.json
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/resource-config.json
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/proxy-config.json
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/serialization-config.json
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/predefined-classes-config.json
Apply jar:file:///disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/library-support.jar!/META-INF/native-image/com.oracle.svm/thirdparty/native-image.properties
Executing [
/disk/graal/builds/mandrel-java17-22.3.2.0-Final/bin/java \
-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=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.access.foreign=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.event=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.loader=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.logger=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.misc=org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile,org.graalvm.nativeimage.pointsto \
--add-exports=java.base/jdk.internal.module=jdk.internal.vm.compiler,org.graalvm.nativeimage.base,org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.org.objectweb.asm=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.perf=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.platform=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.ref=org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile \
--add-exports=java.base/jdk.internal.reflect=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.util=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.vm.annotation=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.invoke.util=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.net=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.nio.ch=org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile \
--add-exports=java.base/sun.reflect.annotation=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.reflect.generics.factory=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.reflect.generics.reflectiveObjects=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.reflect.generics.repository=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.reflect.generics.scope=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.reflect.generics.tree=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.security.jca=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.security.provider=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.security.ssl=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.security.util=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.security.x509=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.text.spi=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util.calendar=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util.cldr=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util.locale.provider=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util.locale=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util.resources=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util=org.graalvm.nativeimage.builder \
--add-exports=java.desktop/sun.java2d.pipe=org.graalvm.nativeimage.builder \
--add-exports=java.desktop/sun.java2d=org.graalvm.nativeimage.builder \
--add-exports=java.management/com.sun.jmx.mbeanserver=org.graalvm.nativeimage.builder \
--add-exports=java.management/sun.management=org.graalvm.nativeimage.builder,org.graalvm.nativeimage.pointsto \
--add-exports=java.xml.crypto/org.jcp.xml.dsig.internal.dom=org.graalvm.nativeimage.builder \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.aarch64=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.amd64=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.site=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.stack=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile,org.graalvm.nativeimage.pointsto \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.common=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.pointsto \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=jdk.internal.vm.compiler \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=jdk.internal.vm.compiler \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.meta=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile,org.graalvm.nativeimage.pointsto \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.runtime=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.pointsto \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.services=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder \
--add-exports=jdk.jfr/jdk.jfr.events=org.graalvm.nativeimage.builder \
--add-exports=jdk.jfr/jdk.jfr.internal.handlers=org.graalvm.nativeimage.builder \
--add-exports=jdk.jfr/jdk.jfr.internal.jfc=org.graalvm.nativeimage.builder \
--add-exports=jdk.jfr/jdk.jfr.internal=org.graalvm.nativeimage.builder \
--add-exports=jdk.management/com.sun.management.internal=org.graalvm.nativeimage.builder \
-XX:-UseJVMCICompiler \
-Xss10m \
-Xms1g \
-Xmx14g \
-Djava.awt.headless=true \
-Dorg.graalvm.version=22.3.2.0-Final \
'-Dorg.graalvm.config=Mandrel Distribution' \
-Dcom.oracle.graalvm.isaot=true \
-Djava.system.class.loader=com.oracle.svm.hosted.NativeImageSystemClassLoader \
-Xshare:off \
--upgrade-module-path \
/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/jvmci/graal.jar \
-Djdk.internal.lambda.disableEagerInitialization=true \
-Djdk.internal.lambda.eagerlyInitialize=false \
-Djava.lang.invoke.InnerClassLambdaMetafactory.initializeLambdas=false \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=jdk.internal.vm.compiler \
--add-modules=ALL-DEFAULT \
--module-path \
/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/jvmci/graal-sdk.jar:/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/builder/native-image-base.jar:/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/builder/pointsto.jar:/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/builder/objectfile.jar:/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/builder/svm.jar \
--module \
org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner \
-imagecp \
/disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar \
-imagemp \
/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/library-support.jar \
-H:CLibraryPath=/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/clibraries/linux-amd64 \
-H:Path=/disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio \
-H:FallbackThreshold=0 \
-H:Log=registerResource:3 \
'-H:Class@manifest from file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar=imageio.Main' \
'-H:Name@manifest from file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar=imageio' \
'-H:JNIConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/jni-config.json=META-INF/native-image/jni-config.json' \
'-H:ReflectionConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/reflect-config.json=META-INF/native-image/reflect-config.json' \
'-H:ResourceConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/resource-config.json=META-INF/native-image/resource-config.json' \
'-H:DynamicProxyConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/proxy-config.json=META-INF/native-image/proxy-config.json' \
'-H:SerializationConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/serialization-config.json=META-INF/native-image/serialization-config.json' \
'-H:PredefinedClassesConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/predefined-classes-config.json=META-INF/native-image/predefined-classes-config.json' \
'-H:Name@explicit image name=target/imageio' \
'-H:Features@jar:file:///disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/library-support.jar!/META-INF/native-image/com.oracle.svm/thirdparty/native-image.properties=com.oracle.svm.thirdparty.gson.GsonFeature'
]
========================================================================================================================
GraalVM Native Image: Generating 'target/imageio' (executable)...
========================================================================================================================
[1/7] Initializing... (2.8s @ 0.21GB)
Version info: 'GraalVM 22.3.2.0-Final Java 17 Mandrel Distribution'
Java version info: '17.0.7+7'
C compiler: gcc (redhat, x86_64, 12.3.1)
Garbage collector: Serial GC
[Use -Dgraal.LogFile=<path> to redirect Graal log output to a file.]
[thread:1] scope: main
[thread:1] scope: main.registerResource
ResourcesFeature: registerResource: java.desktop:sun/java2d/cmm/profiles/CIEXYZ.pf
[thread:1] scope: main.registerResource
ResourcesFeature: registerResource: java.desktop:sun/java2d/cmm/profiles/GRAY.pf
[thread:1] scope: main.registerResource
ResourcesFeature: registerResource: java.desktop:sun/java2d/cmm/profiles/LINEAR_RGB.pf
[thread:1] scope: main.registerResource
ResourcesFeature: registerResource: java.desktop:sun/java2d/cmm/profiles/PYCC.pf
[thread:1] scope: main.registerResource
ResourcesFeature: registerResource: java.desktop:sun/java2d/cmm/profiles/sRGB.pf
[thread:1] scope: main.registerResource
ResourcesFeature: registerResource: MyFreeMono.ttf
[thread:1] scope: main.registerResource
ResourcesFeature: registerResource: Grace_M._Hopper.jp2
[thread:1] scope: main.registerResource
ResourcesFeature: registerResource: MyFreeSerif.ttf
[thread:1] scope: main.registerResource
ServiceLoaderFeature: registerResource: META-INF/services/java.nio.file.spi.FileSystemProvider
[thread:1] scope: main.registerResource
ServiceLoaderFeature: registerResource: META-INF/services/sun.util.resources.LocaleData$CommonResourceBundleProvider
[thread:1] scope: main.registerResource
ServiceLoaderFeature: registerResource: META-INF/services/jdk.internal.logger.DefaultLoggerFinder
[thread:1] scope: main.registerResource
ServiceLoaderFeature: registerResource: META-INF/services/sun.util.resources.LocaleData$SupplementaryResourceBundleProvider
[thread:1] scope: main.registerResource
Resources have been added by ServiceLoaderFeature. Automatic registration can be disabled with -H:-UseServiceLoaderFeature
[thread:1] scope: main.registerResource
ResourcesFeature: registerResource: java.base:java/lang/uniName.dat
[2/7] Performing analysis... [******] (14.8s @ 2.39GB)
4,787 (77.72%) of 6,159 classes reachable
8,122 (59.10%) of 13,742 fields reachable
22,489 (49.07%) of 45,833 methods reachable
176 classes, 2 fields, and 601 methods registered for reflection
140 classes, 222 fields, and 128 methods registered for JNI access
7 native libraries: dl, freetype, m, pthread, rt, stdc++, z
[3/7] Building universe... (2.6s @ 3.60GB)
[4/7] Parsing methods... [*] (1.7s @ 2.00GB)
[5/7] Inlining methods... [***] (0.8s @ 3.21GB)
[6/7] Compiling methods... [****] (12.0s @ 3.33GB)
[7/7] Creating image... (2.5s @ 4.19GB)
10.28MB (40.32%) for code area: 13,933 compilation units
12.66MB (49.64%) for image heap: 149,535 objects and 13 resources
2.56MB (10.04%) for other data
25.50MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 packages in code area: Top 10 object types in image heap:
782.57KB java.util 2.13MB byte[] for code metadata
760.44KB sun.font 1.44MB java.lang.String
461.84KB com.sun.imageio.plugins.tiff 1.41MB byte[] for embedded resources
407.47KB com.sun.crypto.provider 1.17MB byte[] for general heap data
389.59KB java.awt.image 1.05MB java.lang.Class
362.51KB java.lang 895.73KB byte[] for java.lang.String
334.04KB com.sun.imageio.plugins.jpeg 480.19KB java.util.HashMap$Node
321.23KB sun.java2d.marlin 373.98KB com.oracle.svm.core.hub.DynamicHubCompanion
279.66KB java.text 268.50KB java.lang.String[]
277.27KB com.sun.imageio.plugins.png 265.59KB java.util.concurrent.ConcurrentHashMap$Node
5.91MB for 175 more packages 2.29MB for 983 more object types
------------------------------------------------------------------------------------------------------------------------
0.6s (1.5% of total time) in 21 GCs | Peak RSS: 5.39GB | CPU load: 8.92
------------------------------------------------------------------------------------------------------------------------
Produced artifacts:
/disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio (executable)
/disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.build_artifacts.txt (txt)
========================================================================================================================
Finished generating 'target/imageio' in 39.9s.
It fails with: