【发布时间】:2018-04-13 16:20:30
【问题描述】:
我遇到了这个异常:
java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:142)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
为什么?有两个 jar 包含类 Logger。罐子是:
-jboss-logging-spi 和 jboss-logging
Jboss-logging-spi.jar 是 jbosscache-core.jar 的传递依赖,不幸的是它首先被 Tomcat 8 加载。
解决此问题的最佳方法是什么?是否可以控制Tomcat加载.jar的顺序?
附加信息:
-我无法让它在新服务器(Ubuntu)上运行的当前 .war 文件在旧服务器(OpenSuse)上运行。
【问题讨论】:
-
虽然不建议尝试订购 JAR 文件加载,但这是可能的。你为什么使用两个不兼容的 .class 定义?看来您需要让所有库都同意正在使用的版本。
-
这是一个遗留系统。我无法控制它。 .war 在旧服务器上运行,但我无法让它在我正在安装的新服务器上运行。你知道为什么吗?因为 jar 已在 Tomcat 中以不同的顺序加载。这样我想优先考虑某个罐子。你能告诉我怎么做吗?
标签: java maven tomcat classloader