在tomcat 7 / maven嵌入式tomcat上运行Spring 3.1 webapp

时间:2012-06-07 15:27:04

标签: java spring tomcat maven

我只是从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上运行它。: (


编辑:我的春天依赖树:

 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 libs然后打包webapp时,它将再次下载所有3.0.6 jar。然而,依赖树是上面的那个。我认为它与spring-security有关,这与版本有一些问题,并要求我覆盖我的安全模块pom中的瞬态依赖,所以它不会使用较旧的...


编辑3:

spring-data-jpa 。显然最新版本仍然依赖于Spring 3.0.6。我可以通过覆盖pom中的依赖项来使它与Spring 3.1一起发挥,因此测试将贯穿始终。将我的数据模块集成到我的webapp中时,它会尝试使用Spring 3.0.6 ...不知道如何解决这个问题。即使是spring-data-jpa (version 1.1.0.RC1)的最新Realase候选人仍然依赖于Spring 3.0.7 ...

2 个答案:

答案 0 :(得分:3)

在控制台上,执行以下命令:

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

这将列出Spring工件的所有依赖路径。 我很确定你在某处有某种Spring 3.0.x工件的传递依赖。 Maven和Tomcat都没有任何Spring依赖项!

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

的src /主/ web应用/ WEB-INF / lib中

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

答案 1 :(得分:1)

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

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

不知道为什么会这样。希望spring-data-jpa很快会升级到Spring 3.1。也许Maven 3可以更好地处理那些瞬态依赖,但它仍然会使用旧的依赖:树,所以在我的情况下,他们不会t show ..

我的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>