java - 在 Tomcat 8.0.3 上部署

标签 java spring maven tomcat

我正在尝试在 Tomcat 8.0.3 上部署我的 spring 应用程序。 servlet 容器使用 jdk 1.0.7_51。我能够通过

进行部署

mvn tomcat7:plugin

但是当 Tomcat 尝试运行应用程序时。在日志文件中我得到这个异常:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL [file:/home/myApp/apache-tomcat-8.0.3/webapps/myApp/WEB-INF/classes/database.xml]: Invocation of init method failed; nested exception is java.lang.SecurityException: class "org.eclipse.persistence.sessions.coordination.CommandProcessor"'s signer information does not match signer information of other classes in the same package
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:420)
at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:277)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:139)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:79)
at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:70)
at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:103)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1475)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1443)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
... 55 more

我也跑过

mvn dependency:tree|findstr eclipse

我得到了这个结果

[INFO] |  |  +- org.eclipse.persistence:org.eclipse.persistence.jpa:jar:2.5.1:compile
[INFO] |  |  |  +- org.eclipse.persistence:javax.persistence:jar:2.1.0:compile
[INFO] |  |  |  +- org.eclipse.persistence:org.eclipse.persistence.asm:jar:2.5.1:compile
[INFO] |  |  |  +- org.eclipse.persistence:org.eclipse.persistence.antlr:jar:2.5.1:compile
[INFO] |  |  |  +- org.eclipse.persistence:org.eclipse.persistence.jpa.jpql:jar:2.5.1:compile
[INFO] |  |  |  \- org.eclipse.persistence:org.eclipse.persistence.core:jar:2.5.1:compile
[INFO] |  |  \- org.eclipse.persistence:eclipselink:jar:2.3.2:compile
[INFO] |  |  +- eclipse:jdtcore:jar:3.1.0:compile

我该如何解决?

最佳答案

您有多个 JAR 提供包 org.eclipse.persistence.sessions.coordination 中的类,但其中一些 JAR 已签名,一些未签名。 Java 类加载器不允许这样做。

解决这个问题的难易程度取决于具体情况。

如果签名的 JAR 提供的类也由未签名的 JAR 提供,并且应用程序可以在没有签名的 JAR 的情况下运行,那么只需删除签名的 JAR。

如果未签名的 JAR 提供的类也由已签名的 JAR 提供,并且应用程序可以在没有未签名的 JAR 的情况下运行,那么只需删除未签名的 JAR。

如果签名的 JAR 提供的类也由未签名的 JAR 提供,但应用程序在没有签名的 JAR 的情况下无法运行,那么您需要强制 Tomcat 加载未签名的 JAR (s) 首先。以下是 ASF 如何使用 Jira 来解决运行在 Tomcat 8 上的 Jira 6.2 的这个问题。这需要添加到 Web 应用程序的 context.xml 中。

<Resources>
  <!-- Trick to force this JAR to be searched for classes before all others
       to work around a Jira bug -->
  <PreResources className="org.apache.catalina.webresources.FileResourceSet"
                base="${catalina.base}/webapps/jira/WEB-INF/lib/jira-api-6.2.jar"
                webAppMount="/WEB-INF/lib/jira-api-6.2.jar" />
</Resources>

与删除一样,您可以将其翻转以首先加载已签名的 JAR。

如果以上方法都不起作用,您可以解压已签名的 JAR,然后在没有签名的情况下重新打包它们,但如果在任何地方都需要签名的 JAR,这可能会破坏某些内容。

关于java - 在 Tomcat 8.0.3 上部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22684482/

相关文章:

java - 无法访问大型机类类型的封闭实例

Spring 集成 WebFlux 错误处理

ScalaTest:将命令行参数传递给 ScalaTest maven 目标

java - httpAsyncClient 中的状态管理

spring - 组件扫描不扫描子包

maven - 如何在 openLiberty maven 构建中包含第三方库

java - AChartEngine 中 X 轴标题和 X 轴标签之间的边距

java - 生产者消费者终止

java - 解析html代码还是使用java的正则表达式?

java - Spring MVC Hello World 应用程序不工作