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(本机方法)

原因为: 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

此问题是由于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.org上的Oracle为JDK 11.0.3🔗的NoClassDefFoundError: jdk/internal/reflect/ConstructorAccessorImpl。

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