【问题标题】:Why does Infinispan fail with NoClassDefFoundError on Spring Boot / Java 11?为什么 Infinispan 在 Spring Boot / Java 11 上因 NoClassDefFoundError 而失败?
【发布时间】:2019-07-05 06:10:59
【问题描述】:

我正在尝试在 Java 11 上使用 infinispan-spring-boot-starter,但是当应用程序在 jar 中启动时,它会因 NoClassDefFoundError 而失败。

如果我使用 Java 8 运行它可以正常工作。如果我使用 Java 11 运行它也可以正常运行

    mvn spring-boot:run

但如果用

执行会失败
   java -jar target/demo-0.0.1-SNAPSHOT.jar

有以下例外:

    Caused by: org.infinispan.commons.CacheConfigurationException: Failed to construct component org.infinispan.marshall.core.EncoderRegistry, path null
at org.infinispan.factories.impl.BasicComponentRegistryImpl.instantiateWrapper(BasicComponentRegistryImpl.java:141) ~[infinispan-core-9.4.5.Final.jar!/:9.4.5.Final]
at org.infinispan.factories.impl.BasicComponentRegistryImpl.getComponent0(BasicComponentRegistryImpl.java:107) ~[infinispan-core-9.4.5.Final.jar!/:9.4.5.Final]
at org.infinispan.factories.impl.BasicComponentRegistryImpl.getComponent(BasicComponentRegistryImpl.java:73) ~[infinispan-core-9.4.5.Final.jar!/:9.4.5.Final]
at org.infinispan.factories.impl.BasicComponentRegistry.getComponent(BasicComponentRegistry.java:75) ~[infinispan-core-9.4.5.Final.jar!/:9.4.5.Final]
at org.infinispan.factories.GlobalComponentRegistry.<init>(GlobalComponentRegistry.java:158) ~[infinispan-core-9.4.5.Final.jar!/:9.4.5.Final]
... 56 common frames omitted
    Caused by: java.lang.NoClassDefFoundError: org/infinispan/commons/util/FastCopyHashMap$Values (wrong name: org/infinispan/commons/dataconversion/BinaryEncoder)
at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[na:na]
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) ~[na:na]
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550) ~[na:na]
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458) ~[na:na]
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452) ~[na:na]
at java.base/java.security.AccessController.doPrivileged(Native Method) ~[na:na]
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[na:na]
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93) ~[demo-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
at org.infinispan.factories.EncoderRegistryFactory.construct(EncoderRegistryFactory.java:48) ~[infinispan-core-9.4.5.Final.jar!/:9.4.5.Final]
at org.infinispan.factories.impl.BasicComponentRegistryImpl.instantiateWrapper(BasicComponentRegistryImpl.java:137) ~[infinispan-core-9.4.5.Final.jar!/:9.4.5.Final]
... 60 common frames omitted

我的设置:

  • ubuntu 16.04
  • maven 3.6
  • openjdk 11.0.1

在这里您可以找到一个小演示项目来显示问题:https://github.com/ben-schroeder/infinispan-ncdfe。请运行它

mvn clean install
java -jar target/demo-0.0.1-SNAPSHOT.jar

感谢您对问题的任何帮助。这是一个错误还是我错过了什么?

【问题讨论】:

    标签: spring-boot infinispan java-11


    【解决方案1】:

    我也注意到了这一点。在找到解决方案之前,9.4.3.Final 可以正常工作。问题出在 9.4.4 之后。

    【讨论】:

    • 感谢您的解决方法。我为此开了一个问题:issues.jboss.org/browse/ISPN-9977
    • 现在可以使用了。今天发布了 infinispan 启动器。问题出在 2.1.3.RELEASE 中。升级到 2.1.4.RELEASE 解决了这个问题
    【解决方案2】:

    9.4.5 和 9.4.4 也会导致此问题。

    对于在 gradle 构建环境中遇到相同问题的其他人,从拉入它们的依赖项中排除 infinispan 瞬态依赖项,并显式拉入 9.4.3 版本:

      compile (group: "the.lib.that.pulls.in", name: "the", version: transients) {
        exclude group: 'org.infinispan', module: 'infinispan-core'
        exclude group: 'org.infinispan', module: 'infinispan-client-hotrod'
        exclude group: 'org.infinispan', module: 'infinispan-query-dsl'
        exclude group: 'org.infinispan', module: 'infinispan-commons'
      }
      implementation group: 'org.infinispan', name: 'infinispan-core', version: '9.4.3.Final'
      implementation group: 'org.infinispan', name: 'infinispan-client-hotrod', version: '9.4.3.Final'
      implementation group: 'org.infinispan', name: 'infinispan-query-dsl', version: '9.4.3.Final'
      implementation group: 'org.infinispan', name: 'infinispan-commons', version: '9.4.3.Final'
    

    【讨论】:

    • 您可以升级到 2.1.4.RELEASE 并使用正确版本的 Infinispan。我们今天发布启动器
    【解决方案3】:

    感谢您指出这一点。我们正在调查 spring-boot 团队的问题。 这是我们打开的 Spring-Boot 问题

    https://github.com/spring-projects/spring-boot/issues/15981

    [更新] 今天(04-04-2019)发布的 Spring-Boot 2.1.4.RELEASE 纠正了这个问题。请检查发行说明,错误修复部分

    https://github.com/spring-projects/spring-boot/releases/tag/v2.1.4.RELEASE

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 2019-07-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2012-09-08
    • 2013-09-24
    相关资源
    最近更新 更多