【问题标题】:Run Spring 3.1 webapp on tomcat 7 / maven embedded tomcat在 tomcat 7 / maven 嵌入式 tomcat 上运行 Spring 3.1 webapp
【发布时间】:2012-06-11 16:33:43
【问题描述】:

我刚刚从 Spring 3.0.6 升级到 3.1,在 Tomcat 上运行它似乎存在问题。显然,它具有 Spring 3.0.6 依赖项,并会在启动时尝试使用它。然而,这与我的 Spring 3.1 应用程序冲突。我在尝试通过部署时得到了这个

mvn clean package tomcat:run

以及尝试在 Tomcat 7 中运行它时(通过 Eclipse 或将其复制到 tomcat webapps 文件夹)

这里有什么解决方案?升级到 Maven 3 会有所帮助吗? maven Tomcat 插件呢? 1.1 已经发布,但版本 2 似乎仍在开发中。有人有使用 2.x 版 tomcat 插件的 pom 设置吗?

(我目前的错误日志基本上是这样写的:

java.lang.NoClassDefFoundError: org/springframework/core/annotation/AnnotationAttributes

这显然是 Spring 3.1 和 3.0.x 之间的版本冲突)

我对这个很迷茫,整天都在努力解决模块中的依赖问题以将它们升级到 3.1,所有测试都运行了,现在我无法在 Tomcat 上运行它......: (


编辑:我的 spring 依赖树:

 module1:jar:1.0-SNAPSHOT:compile
 +- modul2:jar:1.0-SNAPSHOT:compile
 |  +- module3:jar:1.1-SNAPSHOT:compile
 |  |  +- org.springframework:spring-context:jar:3.1.1.RELEASE:compile
 |  |  +- org.springframework:spring-beans:jar:3.1.0.RELEASE:compile
 |  |  +- org.springframework:spring-aop:jar:3.1.0.RELEASE:compile
 |  |  +- org.springframework:spring-aspects:jar:3.1.0.RELEASE:compile
 |  |  +- org.springframework:spring-orm:jar:3.1.0.RELEASE:compile
 |  |  |  +- org.springframework:spring-jdbc:jar:3.1.0.RELEASE:compile
 |  |  |  \- org.springframework:spring-tx:jar:3.1.0.RELEASE:compile
 |  |  \- org.springframework:spring-core:jar:3.1.0.RELEASE:compile
 |  +- org.springframework:spring-webmvc:jar:3.1.0.RELEASE:compile
 |  |  +- org.springframework:spring-asm:jar:3.1.0.RELEASE:compile
 |  |  +- org.springframework:spring-context-support:jar:3.1.0.RELEASE:compile
 |  |  +- org.springframework:spring-expression:jar:3.1.0.RELEASE:compile
 |  |  \- org.springframework:spring-web:jar:3.1.0.RELEASE:compile
 |  \- org.springframework:spring-test:jar:3.1.0.RELEASE:compile
 \- org.springframework:spring-test-mvc:jar:1.0.0.BUILD-SNAPSHOT:test

编辑 2:

出于某种奇怪的原因,当我从 .m2 文件夹中删除所有 Spring 3.0.6 库然后打包 webapp 时,它将再次下载所有 3.0.6 jar。然而,依赖关系树是上面的那个。我认为它与 spring-security 有关,它与版本有一些问题,并要求我覆盖我的安全模块 pom 中的瞬态依赖关系,因此它不会使用旧的......


编辑 3:

它是 spring-data-jpa。显然最新版本仍然依赖于 Spring 3.0.6。通过覆盖 pom 中的依赖项,我可以让它与 Spring 3.1 一起使用,这样测试就可以通过了。将我的数据模块集成到我的 web 应用程序时,它会尝试使用 Spring 3.0.6 ......不知道如何解决这个问题。即使是spring-data-jpa (version 1.1.0.RC1) 的最新 Realase Candidate 仍然依赖于 Spring 3.0.7...

【问题讨论】:

  • Spring security 有一个不同的 groupId,因此与 org.springframework 不匹配。查看我的更新
  • 啊,我的错。我的意思是spring-data-jpa。 Spring 安全性很好.. 现在逐个模块进行,以抓住罪魁祸首.. 感谢 maven 和 tomcat 信息.. 另一个 SO 帖子表明可能存在 tomcat 问题 (stackoverflow.com/questions/9496413/…)

标签: java spring tomcat maven


【解决方案1】:

在控制台上执行:

mvn dependency:tree -Dincludes=org.springframework,org.springframework.security

这将列出 Spring 工件的所有依赖路径。 我很确定您对那里的某个 Spring 3.0.x 工件有传递依赖。 Maven 和 Tomcat 都没有任何 Spring 依赖!

您可以检查的另一件事是文件夹

src/main/webapp/WEB-INF/lib

如果它存在(它通常不应该出现在 maven webapp 中)它可能包含一个旧的 Spring Jar。删除那个。

【讨论】:

  • 关于 lib 文件夹:我的 WAR 中确实有它。这不是应该自动创建的吗?在我的项目中,我还需要 JSTL 库的文件夹,因为我们正在做 spring MVC webapps ..
  • 是的,它应该是自动创建的,但是会复制 src 树中的现有文件夹,因此这是此类问题的常见来源
  • 不,JSTL库不需要它,也可以通过maven引用它们
  • 找到了解决方案.. 你能检查一下并告诉我,你对这个烂摊子的看法吗? ;)
【解决方案2】:

所以我想通了。问题是mvn dependency:tree 并没有真正显示瞬态依赖关系。

Spring-Data-Jpa 1.0.3.RELEASE 有一些 Spring 3.0.6 依赖项。我必须在我的数据提供程序模块中明确地覆盖它们才能运行测试。这也使它们不会出现在依赖关系树中,但不会让它们出现在我的网络应用程序之外!我必须在网络应用程序中再次覆盖所有 spring 依赖项,然后它才能工作。

不确定为什么会这样.. 希望 spring-data-jpa 很快会升级到 Spring 3.1.. 也许 Maven 3 可以更好地处理这些临时依赖项,但它仍然会使用旧的依赖项:树所以在我的情况下他们不会不显示..

我的 webapp pom.xml 的一部分:

<properties>
    <org.springframework-version>3.1.0.RELEASE</org.springframework-version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-asm</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>

【讨论】:

  • 或者直接使用&lt;spring.version&gt;3.1.1.RELEASE&lt;/spring.version&gt;
猜你喜欢
  • 2017-01-08
  • 2019-03-07
  • 2016-04-28
  • 1970-01-01
  • 2015-06-21
  • 2010-11-25
  • 2013-06-05
  • 2012-02-21
  • 1970-01-01
相关资源
最近更新 更多