避免子依赖关系使用Maven 3覆盖父依赖关系

时间:2016-07-07 22:13:47

标签: java spring maven-3 dependency-management netbeans-8

我在网络项目中使用多个基于弹簧的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

Exclusions example

仅举几个提及,我也访问了其他人,但忘了链接。

编辑: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)

1 个答案:

答案 0 :(得分:0)

您可以通过提及版本4.0.9,在您的孩子pom 中执行显式覆盖,如下所示。

 <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.0.9</version>
 </dependency>

如下所述,此版本会影响孩子的pom ,如果有的话。

  

强制使用

     

如果宣布版本将始终被尊重   在具有特定版本的当前POM 中 - 然而,它应该是   注意到,如果它本身就是也会影响下游的其他poms   依赖于使用传递依赖。