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から削除され、それらを外部にインストールする必要があるために発生します。

  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を起動します。

メモ :この問題に関する技術的な詳細については、issues.apache.orgNoClassDefFoundError:jdk/internal/reflect/ConstructorAccessorImpl (Oracle JDK 11.0.3)を参照してください。

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f