JDK 11導致AEM 6.5出現NoClassDefFoundError問題

在外部安裝CXF套件,以解決使用AEM 6.5x升級至Java 11後的​ NoClassDefFoundError ​問題。

說明 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
      在java.base/jdk.internal.misc.Unsafe.defineClass0(原生方法)
      在java.base/jdk.internal.misc.Unsafe.defineClass(Unsafe.java:1192)
      在java.base/jdk.internal.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)
      在java.base/jdk.internal.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:400)
      在java.base/jdk.internal.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:394)
      在java.base/java.security.AccessController.doPrivileged(Native Method)

原因: java.lang.ClassNotFoundException:無法載入類別
'jdk.internal.reflect.ConstructorAccessorImpl'
     在org.apache.felix.framework.BundleWiringImpl$1.loadClass(BundleWiringImpl.java:91)
     在java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
     在
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1463)
      在org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
      在
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982)
      在java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
… 111省略常見框架

解決方法 resolution

此問題是因為已從AEM移除CXF套件,且這些套件需要安裝在外部:

  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.org上的NoClassDefFoundError: jdk/internal/reflect/ConstructorAccessorImpl (Oracle為JDK 11.0.3)。

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