java.lang.NoSuchMethodError:org.jboss.logging.Logger.getMessageLogger(Ljava / lang / Class; Ljava / lang / String;)Ljava / lang / Object - Tomcat 8

时间:2018-04-13 16:20:30

标签: java maven tomcat classloader

我得到了这个例外:

SELECT table1.id from table1,table2 where table1.id = table2.id and table2.company like '%My Company%'

为什么呢?有两个包含Logger类的jar。罐子是:

-jboss-logging-spi和jboss-logging

Jboss-logging-spi.jar是jbosscache-core.jar的传递依赖项,不幸的是它首先被Tomcat 8加载。

解决此问题的最佳方法是什么?是否可以控制Tomcat加载.jars的顺序?

其他信息:

- 当前的.war文件我无法在新服务器(Ubuntu)上运行它正在使用旧服务器(OpenSuse)。

2 个答案:

答案 0 :(得分:2)

  

解决此问题的最佳方法是什么?

消除重复的类。 期间的。没有其他建议。通过类加载顺序屏蔽问题将会在以后弹出类似的问题,从而使维护更加困难。

一个应用程序永远不会包含同一个类的两个冲突实现(甚至两个相同的实现)。如果其中一个类位于(appserver-)全局类路径上:从那里删除它。

答案 1 :(得分:0)

可以通过滥用Tomcat中的resources工具在Tomcat中完成显式JAR排序。在这里,我不打算给出完整的答案,因为(a)它是非常不推荐的,(b)你最好真正知道你在做什么才能做到。

所以,简单地说:

  1. 阅读有关resources
  2. 的所有信息
  3. 使用<PreResources>强制一个或多个库位于行的前面
  4. 重新考虑您是否真的想要这样做,或者只是解决最初的问题