JDK 11 が原因で NoClassDefFoundError が発生する | AEM 6.5

JDK 11 が原因で NoClassDefFoundError が発生する AEM 6.5

問題

AEM 6.5.x で Java 11 にアップグレード後、以下のエラーがログに記録されます。

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 

解決策

この問題は、CXF パッケージが AEM から削除され、外部でインストールする必要があることによるものです。

  1. AEM を停止します。
  2. ファイル crx-quickstart/conf/sling.properties を見つけて、テキストエディターで開きます。
  3. この行を次のように変更します。

変更前:

org.osgi.framework.bootdelegation=com.yourkit.*, ${org.apache.sling.launcher.bootdelegation}

変更後:

org.osgi.framework.bootdelegation=sun.*,com.sun.*,jdk.internal.reflect,jdk.internal.reflect.*,com.yourkit.*,${org.apache.sling.launcher.bootdelegation}

4. AEM を起動します。

注意:

この問題に関する技術的な詳細については、こちらを参照してください。

アドビのロゴ

アカウントにログイン