Skip to content

Commit ab9bb13

Browse files
committed
Avoid getting the GraalVM version at deployment time for AWT
Reduces the times we start a container when using a builder-image
1 parent aea9c27 commit ab9bb13

File tree

3 files changed

+22
-18
lines changed

3 files changed

+22
-18
lines changed

core/runtime/src/main/java/io/quarkus/runtime/util/JavaVersionUtil.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class JavaVersionUtil {
1212
private static boolean IS_GRAALVM_JDK;
1313
private static boolean IS_JAVA_16_OR_OLDER;
1414
private static boolean IS_JAVA_17_OR_NEWER;
15+
private static boolean IS_JAVA_19_OR_NEWER;
1516

1617
static {
1718
performChecks();
@@ -26,11 +27,13 @@ static void performChecks() {
2627
IS_JAVA_13_OR_NEWER = (first >= 13);
2728
IS_JAVA_16_OR_OLDER = (first <= 16);
2829
IS_JAVA_17_OR_NEWER = (first >= 17);
30+
IS_JAVA_19_OR_NEWER = (first >= 19);
2931
} else {
3032
IS_JAVA_11_OR_NEWER = false;
3133
IS_JAVA_13_OR_NEWER = false;
3234
IS_JAVA_16_OR_OLDER = false;
3335
IS_JAVA_17_OR_NEWER = false;
36+
IS_JAVA_19_OR_NEWER = false;
3437
}
3538

3639
String vmVendor = System.getProperty("java.vm.vendor");
@@ -53,6 +56,10 @@ public static boolean isJava17OrHigher() {
5356
return IS_JAVA_17_OR_NEWER;
5457
}
5558

59+
public static boolean isJava19OrHigher() {
60+
return IS_JAVA_19_OR_NEWER;
61+
}
62+
5663
public static boolean isGraalvmJdk() {
5764
return IS_GRAALVM_JDK;
5865
}

extensions/awt/deployment/src/main/java/io/quarkus/awt/deployment/AwtProcessor.java

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,6 @@ JniRuntimeAccessBuildItem setupJava2DClasses(NativeImageRunnerBuildItem nativeIm
128128
Optional<ProcessInheritIODisabledBuildItem> processInheritIODisabledBuildItem) {
129129
nativeImageRunnerBuildItem.getBuildRunner()
130130
.setup(processInheritIODisabled.isPresent() || processInheritIODisabledBuildItem.isPresent());
131-
final GraalVM.Version v;
132-
if (nativeImageRunnerBuildItem.getBuildRunner() instanceof NoopNativeImageBuildRunner) {
133-
v = CURRENT;
134-
} else {
135-
v = nativeImageRunnerBuildItem.getBuildRunner().getGraalVMVersion();
136-
}
137131
final List<String> classes = new ArrayList<>();
138132
classes.add("com.sun.imageio.plugins.jpeg.JPEGImageReader");
139133
classes.add("com.sun.imageio.plugins.jpeg.JPEGImageWriter");
@@ -258,18 +252,11 @@ JniRuntimeAccessBuildItem setupJava2DClasses(NativeImageRunnerBuildItem nativeIm
258252
// A new way of dynamically loading shared objects instead
259253
// of baking in static libs: https://github.com/oracle/graal/issues/4921
260254
classes.add("sun.awt.X11FontManager");
261-
if (v.javaVersion.feature() != 19) {
262-
classes.add("java.awt.GraphicsEnvironment");
263-
classes.add("sun.awt.X11GraphicsConfig");
264-
classes.add("sun.awt.X11GraphicsDevice");
265-
classes.add("sun.java2d.SunGraphicsEnvironment");
266-
classes.add("sun.java2d.xr.XRSurfaceData");
267-
}
268-
269-
// Added for JDK 19+ due to: https://github.com/openjdk/jdk20/commit/9bc023220 calling FontUtilities
270-
if (v.jdkVersionGreaterOrEqualTo("19")) {
271-
classes.add("sun.font.FontUtilities");
272-
}
255+
classes.add("java.awt.GraphicsEnvironment");
256+
classes.add("sun.awt.X11GraphicsConfig");
257+
classes.add("sun.awt.X11GraphicsDevice");
258+
classes.add("sun.java2d.SunGraphicsEnvironment");
259+
classes.add("sun.java2d.xr.XRSurfaceData");
273260

274261
return new JniRuntimeAccessBuildItem(true, true, true, classes.toArray(new String[0]));
275262
}

extensions/awt/runtime/src/main/java/io/quarkus/awt/runtime/graal/DarwinAwtFeature.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.graalvm.nativeimage.hosted.RuntimeClassInitialization;
77

88
import io.quarkus.runtime.util.JavaVersionUtil;
9+
import org.graalvm.nativeimage.hosted.RuntimeJNIAccess;
910

1011
@Platforms({ Platform.DARWIN_AMD64.class, Platform.DARWIN_AARCH64.class })
1112
public class DarwinAwtFeature implements Feature {
@@ -15,5 +16,14 @@ public void afterRegistration(AfterRegistrationAccess access) {
1516
// Quarkus run time init for AWT in Darwin
1617
RuntimeClassInitialization.initializeAtRunTime("sun.lwawt.macosx");
1718
}
19+
20+
// Added for JDK 19+ due to: https://github.com/openjdk/jdk20/commit/9bc023220 calling FontUtilities
21+
if (JavaVersionUtil.isJava19OrHigher()) {
22+
try {
23+
RuntimeJNIAccess.register(Class.forName("sun.font.FontUtilities"));
24+
} catch (ClassNotFoundException e) {
25+
throw new RuntimeException("Failed to register FontUtilities for JNI Access", e);
26+
}
27+
}
1828
}
1929
}

0 commit comments

Comments
 (0)