Closed jerboaa closed 1 year ago
imageioAWTTest/build-and-run.log
has more details, namely:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no awt in java.library.path
at org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibraryRelative(NativeLibrarySupport.java:136)
at java.base@20-beta/java.lang.ClassLoader.loadLibrary(ClassLoader.java:50)
at java.base@20-beta/java.lang.Runtime.loadLibrary0(Runtime.java:880)
at java.base@20-beta/java.lang.System.loadLibrary(System.java:2051)
at java.desktop@20-beta/java.awt.Toolkit$2.run(Toolkit.java:1384)
at java.desktop@20-beta/java.awt.Toolkit$2.run(Toolkit.java:1382)
at java.base@20-beta/java.security.AccessController.executePrivileged(AccessController.java:171)
at java.base@20-beta/java.security.AccessController.doPrivileged(AccessController.java:319)
at java.desktop@20-beta/java.awt.Toolkit.loadLibraries(Toolkit.java:1381)
at java.desktop@20-beta/java.awt.Toolkit.initStatic(Toolkit.java:1419)
at java.desktop@20-beta/java.awt.Toolkit.<clinit>(Toolkit.java:1393)
at java.base@20-beta/java.lang.Class.ensureInitialized(DynamicHub.java:550)
at java.desktop@20-beta/sun.awt.AppContext$2.run(AppContext.java:273)
at java.desktop@20-beta/sun.awt.AppContext$2.run(AppContext.java:262)
at java.base@20-beta/java.security.AccessController.executePrivileged(AccessController.java:171)
at java.base@20-beta/java.security.AccessController.doPrivileged(AccessController.java:319)
at java.desktop@20-beta/sun.awt.AppContext.initMainAppContext(AppContext.java:262)
at java.desktop@20-beta/sun.awt.AppContext$3.run(AppContext.java:315)
at java.desktop@20-beta/sun.awt.AppContext$3.run(AppContext.java:298)
at java.base@20-beta/java.security.AccessController.executePrivileged(AccessController.java:171)
at java.base@20-beta/java.security.AccessController.doPrivileged(AccessController.java:319)
at java.desktop@20-beta/sun.awt.AppContext.getAppContext(AppContext.java:297)
at java.desktop@20-beta/javax.imageio.spi.IIORegistry.getDefaultInstance(IIORegistry.java:123)
at java.desktop@20-beta/javax.imageio.ImageIO.<clinit>(ImageIO.java:64)
at imageio.Main.paintGrace(Main.java:70)
at imageio.Main.main(Main.java:189)
Failure seen with JDK 17-based build too. Updated the summary.
With https://github.com/graalvm/mandrel/issues/487 fixed, this should be fairly easy to fix. I'm looking into it.
With all the fixes in we now get (i.e. this is the current cause of test failure):
$ ./imageio
Exception in thread "main" java.lang.NoClassDefFoundError: sun/awt/SunToolkit
at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.functions.JNIFunctions.FindClass(JNIFunctions.java:352)
at java.desktop@17.0.7-beta/sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at java.desktop@17.0.7-beta/sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:101)
at java.base@17.0.7-beta/java.security.AccessController.executePrivileged(AccessController.java:127)
at java.base@17.0.7-beta/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.desktop@17.0.7-beta/sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:60)
at java.desktop@17.0.7-beta/sun.awt.PlatformGraphicsInfo.createGE(PlatformGraphicsInfo.java:36)
at java.desktop@17.0.7-beta/java.awt.GraphicsEnvironment$LocalGE.createGE(GraphicsEnvironment.java:93)
at java.desktop@17.0.7-beta/java.awt.GraphicsEnvironment$LocalGE.<clinit>(GraphicsEnvironment.java:84)
at java.desktop@17.0.7-beta/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:106)
at java.desktop@17.0.7-beta/java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1182)
at java.desktop@17.0.7-beta/java.awt.image.ColorConvertOp.ICCBIFilter(ColorConvertOp.java:332)
at java.desktop@17.0.7-beta/java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:277)
at imageio.Main.lambda$paintGrace$0(Main.java:79)
at java.base@17.0.7-beta/java.util.Map.forEach(Map.java:713)
at imageio.Main.paintGrace(Main.java:77)
at imageio.Main.main(Main.java:189)
at java.desktop@17.0.7-beta/sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:101)
is in the headful code, so this cannot be. We want to run headless.
Running with headless yields a different error:
$ ./imageio -Djava.awt.headless=true
Exception in thread "main" java.io.IOException: Problem reading font data.
at java.desktop@17.0.7-beta/java.awt.Font.createFont0(Font.java:1208)
at java.desktop@17.0.7-beta/java.awt.Font.createFont(Font.java:1076)
at imageio.Main.loadFonts(Main.java:135)
at imageio.Main.paintRectangles(Main.java:93)
at imageio.Main.main(Main.java:190)
@jerboaa AFAIK this is being worked in https://github.com/quarkusio/quarkus/pull/32432
Thanks, yes. Taking inspiration from there.
This sequence worked for me:
mvn clean package
rm -rf ~/.java/fonts/ && \
rm -rf src/main/resources/META-INF/native-image && \
$MANDREL_HOME/bin/java -Djava.awt.headless=true -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image -jar target/imageio.jar
$MANDREL_HOME/bin/jar uf target/imageio.jar -C src/main/resources/ META-INF
$MANDREL_HOME/bin/native-image --verbose -J-Djava.awt.headless=true -H:IncludeResources="Grace_M._Hopper.jp2,MyFreeMono.ttf,MyFreeSerif.ttf,.*/iio-plugin.*properties$,.*/.*pf$" \
--no-fallback -H:Log=registerResource:3 -jar target/imageio.jar target/imageio
mkdir ./target/lib && touch ./target/lib/fontconfig.properties && \
cd target && ./imageio -Djava.awt.headless=true -Djava.home=$(pwd)
PR with proposed fixes in #146
Note that we still see failures of this test with JDK 20 (20.0.1 specifically). That's due to https://github.com/graalvm/mandrel/issues/487. The OpenJDK fix is in 17.0.7
(April) and 20.0.2
(July).
imageio integration test fails with a JDK 20-based 23.0.0-dev mandrel build like so:
See: https://github.com/graalvm/mandrel/actions/runs/4320017354/jobs/7540073635#step:10:13029