JDK 11 が原因で NoClassDefFoundError AEM 6.5
AEM 6.5x を使用して Java 11 にアップグレードした後で NoClassDefFoundError の問題を解決するには、CXF パッケージを外部にインストールします。
説明 description
AEM 6.5.x を使用して Java 11 にアップグレードした後、ログに次のエラーが表示されます。
15.09.2020 00:30:20.868 *ERROR* [ FelixStartLevel] org.apache.sling.scripting.sightly バンドル
org.apache.sling.scripting.sightly:1.1.2.1_4_0 (557)[ org.apache.sling.scripting.sightly.impl.engine.extension.use.JavaUseProvider (3410) ]:次の期間にエラーが発生しました
実装オブジェクトのインスタンス化(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)
…
原因:java.lang.ClassNotFoundException: クラスをロードできません
'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)
時刻
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation (BundleWiringImpl.java:1463)
at org.apache.felix.framework.BundleWiringImpl.access$300 (BundleWiringImpl.java:79)
時刻
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass (BundleWiringImpl.java:1982)
at java.base/java.lang.ClassLoader.loadClass (ClassLoader.java:521)
111 コマ省略
解決策 resolution
この問題は、CXF パッケージがAEMから削除され、それらを外部にインストールする必要があるために発生します。
-
AEMを停止します。
-
このファイルを見つけて、テキスト エディターで開きます:crx-quickstart/conf/sling.properties。
-
次の行を変更します。
次の前
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}
-
AEMを起動します。
メモ :この問題に関する技術的な詳細については、issues.apache.org の NoClassDefFoundError:jdk/internal/reflect/ConstructorAccessorImpl (Oracle JDK 11.0.3)を参照してください。