我在网络项目中使用多个基于弹簧的maven存储库,并且我遇到了子POM使用的依赖项问题。
我有这样的父POM:
<dependencyManagement>
<dependencies>
<!-- SPRING -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.3.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SPRING SECURITY -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-bom</artifactId>
<version>4.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SPRING BOOT -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.3.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SPRING WS -->
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-security</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<!-- OTHER DEPENDENCIES OMITTED -->
</dependencies>
</dependencyManagement>
这样的孩子POM:
<dependencies>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-security</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<!-- OTHER DEPENDENCIES OMITTED -->
</dependencies>
就我对maven排除的理解而言,这应该避免覆盖父POM版本,但是由于spring-ws-security依赖于较低版本的spring-core(4.0.9),方法已经改变我无法在tomcat本地服务器上部署应用程序,因为NoSuchMethodError异常,当应用程序实际部署时也可以触发,但仍然依赖于旧的spring-core版本。
如何避免重写依赖项? 或者是否有某种方法可以使用这两种依赖关系(只要我搜索到的不安全)?
已访问的链接:
Similar problem, but from child to parent,
仅举几个提及,我也访问了其他人,但忘了链接。
编辑:spring-ws依赖项使用spring 4.0.9,它覆盖了我在父POM中定义的4.3.0版本(我需要使用的版本)。
+- org.springframework.ws:spring-ws-core:jar:2.2.3.RELEASE:compile
[INFO] | | | +- org.springframework:spring-oxm:jar:4.3.0.RELEASE:compile (version managed from 4.0.9.RELEASE)
[INFO] | | | +- org.springframework:spring-web:jar:4.3.0.RELEASE:compile (version managed from 4.0.9.RELEASE)
[INFO] | | | \- org.springframework:spring-webmvc:jar:4.3.0.RELEASE:compile (version managed from 4.0.9.RELEASE)
答案 0 :(得分:0)
您可以通过提及版本4.0.9,在您的孩子pom 中执行显式覆盖,如下所示。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.9</version>
</dependency>
如下所述,此版本会影响孩子的pom ,如果有的话。
强制使用
如果宣布版本将始终被尊重 在具有特定版本的当前POM 中 - 然而,它应该是 注意到,如果它本身就是也会影响下游的其他poms 依赖于使用传递依赖。