diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java index bb86216030bc..ab5d52b015af 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JDKInitializationFeature.java @@ -73,6 +73,14 @@ public void afterRegistration(AfterRegistrationAccess access) { rci.initializeAtBuildTime("jdk.nio", JDK_CLASS_REASON); rci.initializeAtBuildTime("jdk.vm.ci", "Native Image classes are always initialized at build time"); rci.initializeAtBuildTime("jdk.xml", JDK_CLASS_REASON); + /* + * The XML classes have cyclic class initializer dependencies, and class initialization can + * deadlock/fail when initialization is started at the "wrong part" of the cycle. + * Force-initializing the correct class of the cycle here, in addition to the + * "whole package" initialization above, breaks the cycle because it triggers immediate + * initilalization here before the static analysis is started. + */ + rci.initializeAtBuildTime("jdk.xml.internal.JdkXmlUtils", JDK_CLASS_REASON); rci.initializeAtBuildTime("sun.invoke", JDK_CLASS_REASON); rci.initializeAtBuildTime("sun.launcher", JDK_CLASS_REASON);