【问题标题】:how tomcat will load the class if duplicate classes exist with same package structure如果存在具有相同包结构的重复类,tomcat将如何加载该类
【发布时间】:2016-04-26 12:57:00
【问题描述】:

Jboss-allclient.jar 和 jboss-logging.jar 有一个类 org.jboss.logging.Logger ,其中类内部定义的方法不同,但两者的包结构相同类。因此,我在部署时遇到了异常。

例外

getMessage() 的 NoSuchMethodException

这是因为,getMessage() 方法仅存在于一个类中。不幸的是,它选择了错误的类并引发了异常。

注意:

这适用于 tomcat 7(windows 和 linux 版本)和 tomcat8 (Windows)
适用于 tomcat 8(Linux 版本)。 JRE 版本为 8

我的应用程序需要这两个 jar。

【问题讨论】:

  • @PankajPandey。我浏览了给定的链接,没有得到我问题的答案。我的问题是,我需要什么来摆脱这个问题?我在 WEB-INF/lib/ 下都有两个 jar,并且提到的类存在于两个 jar 中。但是类的定义不同。这就是为什么我只在 tomcat 8(Linux 版本)中得到这个异常的原因。不适用于 tomcat 7(windows 和 linux)和 tomcat 8(Windows 版本)。
  • 该链接描述了类加载的顺序,在 tomcat 8 之前,顺序是字母顺序,但在 tomcat 8 中,顺序是随机的,取决于底层操作系统。解决方法是,如果您将低阶 jar 文件之一移动到 tomcat/lib 中,那么它可能会起作用。请尝试。

标签: java tomcat jboss classloader tomcat8


【解决方案1】:

在 Tomcat 8 中,不能保证在单个战争中加载 jar 的顺序。在它是按字母顺序之前。

它被报告为 Apache 的一个错误,但他们声称这是一个特性 ;) 检查 https://bz.apache.org/bugzilla/show_bug.cgi?id=57129

其中一位开发人员提出了一种解决方法,但我还没有尝试过。你可以看看https://github.com/openwide-java/tomcat-classloader-ordered

祝你好运!

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 2021-11-09
    • 2020-10-20
    • 2012-08-10
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多