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套件,且這些套件需要安裝在外部:
-
停止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)。