Java 仅在Websphere中获取guava-30.0-jre.jar的com.google.common.util.concurrent包中存在的SettableFuture类的NoClassDefFoundError

Java 仅在Websphere中获取guava-30.0-jre.jar的com.google.common.util.concurrent包中存在的SettableFuture类的NoClassDefFoundError,java,websphere,classloader,noclassdeffounderror,appserver,Java,Websphere,Classloader,Noclassdeffounderror,Appserver,在启用类跟踪时,发现WebSphere正在从同一个guava-30.0-jre.jar加载同一包(com.google.common.util.concurrent)中的其他类 com.google.common.util.concurrent包中的类总数:310 加载的总类数:285(根据类加载跟踪) 尝试过的解决方案: 类加载顺序设置为父级最后一个 在ApplicationServers>server1>ProcessDefinition>Java虚拟机下的通用JVM参数中显式设置jar路径

在启用类跟踪时,发现WebSphere正在从同一个guava-30.0-jre.jar加载同一包(com.google.common.util.concurrent)中的其他类

com.google.common.util.concurrent包中的类总数:310 加载的总类数:285(根据类加载跟踪)

尝试过的解决方案:

  • 类加载顺序设置为父级最后一个
  • 在ApplicationServers>server1>ProcessDefinition>Java虚拟机下的通用JVM参数中显式设置jar路径
  • 还尝试创建共享库并使用部署的web应用程序引用它。创建共享库所遵循的步骤来自
  • JAR文件也可以,反编译没有任何问题
  • 机器重启
  • 下面是一个堆栈跟踪以供参考:

    Caused by: java.lang.NoClassDefFoundError: com/google/common/util/concurrent/SettableFuture
    at com.google.common.cache.LocalCache$LoadingValueReference.<init>(LocalCache.java:3472) ~[?:?]
    at com.google.common.cache.LocalCache$LoadingValueReference.<init>(LocalCache.java:3476) ~[?:?]
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2134) ~[?:?]
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045) ~[?:?]
    at com.google.common.cache.LocalCache.get(LocalCache.java:3951) ~[?:?]
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974) ~[?:?]
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4935) ~[?:?]
    at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4941) ~[?:?]
    at com.google.inject.internal.Annotations$AnnotationChecker.hasAnnotations(Annotations.java:248) ~[guice-4.0.jar:?]
    at com.google.inject.internal.Annotations.isBindingAnnotation(Annotations.java:314) ~[guice-4.0.jar:?]
    at com.google.inject.internal.Annotations.findBindingAnnotation(Annotations.java:295) ~[guice-4.0.jar:?]
    at com.google.inject.internal.ProviderMethodsModule.getKey(ProviderMethodsModule.java:280) ~[guice-4.0.jar:?]
    at com.google.inject.internal.ProviderMethodsModule.createProviderMethod(ProviderMethodsModule.java:264) ~[guice-4.0.jar:?]
    at com.google.inject.internal.ProviderMethodsModule.getProviderMethods(ProviderMethodsModule.java:144) ~[guice-4.0.jar:?]
    at com.google.inject.internal.ProviderMethodsModule.configure(ProviderMethodsModule.java:123) ~[guice-4.0.jar:?]
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340) ~[guice-4.0.jar:?]
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:349) ~[guice-4.0.jar:?]
    at com.google.inject.spi.Elements.getElements(Elements.java:110) ~[guice-4.0.jar:?]
    at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138) ~[guice-4.0.jar:?]
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104) ~[guice-4.0.jar:?]
    at com.google.inject.Guice.createInjector(Guice.java:96) ~[guice-4.0.jar:?]
    at com.google.inject.Guice.createInjector(Guice.java:73) ~[guice-4.0.jar:?]
    
    原因:java.lang.NoClassDefFoundError:com/google/common/util/concurrent/SettableFuture
    在com.google.common.cache.LocalCache$LoadingValueReference.(LocalCache.java:3472)~[?:?]
    在com.google.common.cache.LocalCache$LoadingValueReference.(LocalCache.java:3476)~[?:?]
    在com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2134)~[?:?]
    在com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)~[?:?]
    在com.google.common.cache.LocalCache.get(LocalCache.java:3951)~[?:?]
    在com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974)~[?:?]
    在com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4935)~[?:?]
    在com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4941)~[?:?]
    在com.google.inject.internal.Annotations$AnnotationChecker.hasaannotations(Annotations.java:248)~[guice-4.0.jar:?]
    在com.google.inject.internal.Annotations.isBindingAnnotation(Annotations.java:314)~[guice-4.0.jar:?]
    在com.google.inject.internal.Annotations.findBindingAnnotation(Annotations.java:295)~[guice-4.0.jar:?]
    在com.google.inject.internal.providerMethodModule.getKey(providerMethodModule.java:280)~[guice-4.0.jar:?]
    在com.google.inject.internal.ProviderMethodModule.createProviderMethod(ProviderMethodModule.java:264)~[guice-4.0.jar:?]
    在com.google.inject.internal.ProviderMethodsModule.getProviderMethods(ProviderMethodsModule.java:144)~[guice-4.0.jar:?]
    在com.google.inject.internal.providerMethodModule.configure(providerMethodModule.java:123)~[guice-4.0.jar:?]
    在com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)~[guice-4.0.jar:?]
    在com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:349)~[guice-4.0.jar:?]
    在com.google.inject.spi.Elements.getElements(Elements.java:110)~[guice-4.0.jar:?]
    在com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138)~[guice-4.0.jar:?]
    在com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)~[guice-4.0.jar:?]
    在com.google.inject.Guice.createInjector(Guice.java:96)~[Guice-4.0.jar:?]
    在com.google.inject.Guice.createInjector(Guice.java:73)~[Guice-4.0.jar:?]
    

    请注意,当在WebLogic、Tomcat和JBoss中部署相同的web应用程序时,一切正常

    您是否可以共享任何嵌套的“起因”异常的堆栈?通常,NoClassDefFoundError是由基础ClassNotFoundException引起的,该基础ClassNotFoundException通常有一个堆栈,告诉您使用了什么类装入器。共享堆栈是唯一嵌套的堆栈。在分析native_stderr.log文件后,我们发现只有com.google.common.util.concurrent包中的几个类被加载,其余的类没有被加载,因此native_syserr.log文件中也没有它们的条目。用于加载类的类加载器是CompoundClassLoader。为了更好地理解在新编辑中共享完整堆栈跟踪。