【发布时间】:2018-04-04 13:45:09
【问题描述】:
当我尝试在 Tomcat 中部署 .war 文件时遇到此异常
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)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
请注意:
-相同的 .war 文件已经在不同的服务器上运行(Linux OpenSuse)
-我将 Tomcat 文件夹(所有服务器的)从旧服务器(OpenSuse)复制到新服务器(Ubuntu 16.04)。这样文件是一样的。
-两台服务器的 JVM 相同。
-在开发期间(在 Eclipse 中)不会发生异常。
我的问题是:
-有些人建议我更改我的 maven pom 文件。是否有意义?因为正如我所说,.war 已经在 OpenSuse 服务器上运行了。
-我应该能够在不进行任何更改的情况下部署 same.war。我不应该吗?
【问题讨论】:
-
您是否确认您的战争中确实存在缺失的部分?一个可能的原因是它被配置为在运行时可用,而您的 Tomcat 安装没有提供它。
-
它出现了!正如我上面所说,我已将所有 Tomcat 目录从 OpenSuse 服务器复制到新的 Ubuntu 服务器。两个 Tomcat 目录在不同的 Linux 服务器上是相同的。
-
你确定新的tomcat服务器上没有其他库吗?似乎该类位于具有不同(或多个)版本的类路径上。
-
是的,我确定是因为我将tomcat目录从旧Linux服务器复制并粘贴到了新服务器。如果我在新的 Linux 服务器上有其他库,它也不会在旧的服务器上运行。
-
看起来您在 Hibernate 中使用了错误版本的 JBoss Logging。你的类路径上有哪些版本的 Hibernate 和 JBoss Logging?
标签: java tomcat jboss-logging