JDK 11 causes NoClassDefFoundError AEM 6.5
Install the CXF packages externally to solve the issue of the NoClassDefFoundError after an upgrade to Java 11 with AEM 6.5x.
Description description
The error below is observed in the logs after upgrading to Java 11 with AEM 6.5.x.
15.09.2020 00:30:20.868 *ERROR* [
FelixStartLevel]
org.apache.sling.scripting.sightly bundle
org.apache.sling.scripting.sightly:1.1.2.1_4_0 (557)[
org.apache.sling.scripting.sightly.impl.engine.extension.use.JavaUseProvider(3410)]
: Error during
instantiation of the implementation object (java.lang.NoClassDefFoundError:
jdk/internal/reflect/ConstructorAccessorImpl)
java.lang.NoClassDefFoundError: jdk/internal/reflect/ConstructorAccessorImpl
at java.base/jdk.internal.misc.Unsafe.defineClass0(Native Method)
at java.base/jdk.internal.misc.Unsafe.defineClass(Unsafe.java:1192)
at java.base/jdk.internal.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)
at java.base/jdk.internal.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:400)
at java.base/jdk.internal.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:394)
at java.base/java.security.AccessController.doPrivileged(Native Method)
…
Caused by: java.lang.ClassNotFoundException: Unable to load class
‘jdk.internal.reflect.ConstructorAccessorImpl’
at org.apache.felix.framework.BundleWiringImpl$1.loadClass(BundleWiringImpl.java:91)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1463)
at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
… 111 common frames omitted
Resolution resolution
This issue is due to CXF packages having been removed from AEM and those need to be installed externally:
-
Stop the AEM.
-
Find and open this file in a text editor: crx-quickstart/conf/sling.properties.
-
Modify this line:
Before
org.osgi.framework.bootdelegation=com.yourkit.*,${org.apache.sling.launcher.bootdelegation}
Afterorg.osgi.framework.bootdelegation=sun.*,com.sun.*,jdk.internal.reflect,jdk.internal.reflect.*,com.yourkit.*,${org.apache.sling.launcher.bootdelegation}
-
Start the AEM.
Note: See NoClassDefFoundError: jdk/internal/reflect/ConstructorAccessorImpl with Oracle JDK 11.0.3 on issues.apache.org for technical details on this issue.