【问题标题】:Jersey Startup Issue : java.lang.NoSuchMethodError: com.google.common.collect.Sets.newIdentityHashSet()泽西岛启动问题:java.lang.NoSuchMethodError: com.google.common.collect.Sets.newIdentityHashSet()
【发布时间】:2015-10-15 07:56:16
【问题描述】:

我正在使用 Jersey 2.5.1。我将 .war 文件打包在 .ear 文件中。在 .war 模块的 WEB-INF\lib 文件夹中,我有 guava-14.0.1.jar。 jersey-common-2.5.1.jar 依赖于 guava。

在 ear/lib 文件夹中,我有另一个 guava jar --> guava-17.0,这是我的项目所需要的。

两个 jar 都有 newIdentityHashSet() 方法,但我仍然面临以下错误:

java.lang.NoSuchMethodError: com.google.common.collect.Sets.newIdentityHashSet()Ljava/util/Set; 在 org.glassfish.jersey.model.internal.CommonConfig.(CommonConfig.java:220) 在 org.glassfish.jersey.server.ResourceConfig$State.(ResourceConfig.java:110) 在 org.glassfish.jersey.server.ResourceConfig.(ResourceConfig.java:351) 在 org.glassfish.jersey.servlet.WebComponent.createResourceConfig(WebComponent.java:444) 在 org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:302) 截断。查看完整堆栈跟踪的日志文件

我尝试移除其中一个番石榴罐,但错误相同。我试过在两个地方都保持相同的版本。但是没用。

我在 Weblogic 12C 中进行部署。

对此的任何帮助都会很棒。

【问题讨论】:

  • 嗯,方法好像是有的。您是否尝试过获取 guava 的源代码并将其包含在您的源文件夹中,然后将其与项目的其余部分一起构建?
  • 不。没试过。我试试看
  • 这听起来是个非常糟糕的主意。您不应该构建 Guava,而是链接到它

标签: java rest jersey guava weblogic12c


【解决方案1】:

将 jar 文件复制到同一个 ear/war 文件中并不是一个好主意。因为会出现这种类型的错误。最佳做法是按库仅提供一个版本。

话虽如此,您可以检查尝试加载没有该方法的类的位置:

检查从哪个 jar 文件加载特定类的一种方法是将参数:-verbose:class 设置为 JRE。

这将为您提供有关此类加载问题的提示。

WLS 还捆绑了类加载器分析工具 (CAT),可帮助您识别重复的 jar 文件(冲突等)

【讨论】:

    猜你喜欢
    • 2019-01-31
    • 2015-05-09
    • 2011-05-02
    • 2014-10-06
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2015-05-20
    • 2017-05-13
    相关资源
    最近更新 更多