在Intelli J Idea中进行调试时,Tomcat加载了较低版本的Spring库

时间:2019-06-03 06:50:10

标签: spring maven tomcat intellij-idea war

我有一个使用目标war的maven spring web(3.2。*)项目构建,我想使用tomcat(web:war爆炸的工件)以intellij的方式对其进行调试,但是Web应用程序始终无法加载

  

[ERROR] .. |上下文初始化失败java.lang.NoSuchMethodError:   org.springframework.web.context.ConfigurableWebApplicationContext.getEnvironment()Lorg / springframework / core / env / ConfigurableEnvironment;     在   org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:404)

由于某些pom依赖关系,他们引用了较低版本的spring(3.0.7),因此我可以使用maven-war-plugin(2.3):packagingExcludes在商品中排除它们,但我如何在web:war中排除它们

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <packagingExcludes>
            WEB-INF/lib/org.springframework.core-3.0.7.RELEASE.jar,
            // others springframework jars
        </packagingExcludes>
    </configuration>
</plugin>

2 个答案:

答案 0 :(得分:0)

不是插件,您不应该从IDE中排除依赖关系,而是依赖关系图。使用mvndependency:tree来查看哪个模块的依赖关系包括旧的spring版本。当您找出来时,将其从构建中排除。

这里是如何使用来自maven documentation的依赖排除的示例。

<dependency>
      <groupId>sample.ProjectA</groupId>
      <artifactId>Project-A</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>  <!-- declare the exclusion here -->
          <groupId>sample.ProjectB</groupId>
          <artifactId>Project-B</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>

答案 1 :(得分:0)

Maven如何解决依赖冲突的方法并不容易理解。 它称为nearest-wins strategy,可能会导致使用旧版本。

如果未明确定义依赖版本,请尝试结合使用Maven Dependency ManagementMaven Enforcer Plugin来修复版本并导致构建失败。

简单的方法是analyse the dependency graph with

mvn dependency:tree

检查哪个依赖项依赖于旧的spring库,并排除已经在其答案中发布的@ alexandar-petrov。

从正在构建的工件中排除依赖项不会对Intellij或任何其他IDE将使用的类路径产生任何影响。