项目多重首选项中的父pom和dependencyManagement

时间:2016-09-28 17:08:46

标签: spring maven maven-3 dependency-management

我有一个多元素maven proyect。 在我的pom root中,我有一个父pom和带有spring依赖的DependencyManagement。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company.project</groupId>
    <artifactId>artifactId</artifactId>
    <version>${project-version}</version>
    <packaging>pom</packaging>

    <!-- Parent Pom -->
    <parent>
        <groupId>com.company.project</groupId>
        <artifactId>parent_pom</artifactId>
        <version>1.0.0</version>
    </parent>

    <modules>
        <module>artifactId-war</module>
    </modules>

    <properties>
        <project-version>1.0.0</project-version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.3.3.RELEASE</spring.version>
    </properties>

    <dependencyManagement>
        <dependencies>
                <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>${spring.version}</version>
                <type>pom</type> -->
                <scope>import</scope>
            </dependency>

            ....

在我的artifactId-war中,我有这个pom.xml:

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company.project</groupId>
    <artifactId>artifactId-war</artifactId>
    <packaging>war</packaging>

    <parent>
        <groupId>com.company.project</groupId>
        <artifactId>artifactId</artifactId>
        <version>${project-version}</version>
    </parent>

    <dependencies>      
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>   
...

我的问题是在父pom中有一个Spring旧版本(4.1.8),在我的根pom中我使用了4.3.3版本的工件spring-framework-bom。 在我的依赖列表中,proyect出现了parent_pom版本。我如何优先考虑我的pom root的依赖?

2 个答案:

答案 0 :(得分:0)

您可以在artifactId-war pom中声明正确的spring依赖项。 Maven通过最短路径获胜者规则解决冲突。

如果您只想通过父pom进行整体控制,可以在父级中定义属性,但仍需要在artifactId-war pom中声明依赖项。

答案 1 :(得分:0)

你的artifactId-war的pom.xml有一个错误。 在<parent>代码中,<groupId>应为com.company.project而不是com.company.project.artifactId
有了这个,你不必在artifactId-war的pom.xml中特别提到spring jar版本(正如另一个答案所建议的那样)。它将继承artifactId的pom.xml中的版本 从父pom维护依赖版本以保持子pom级别的版本始终是一个好习惯。您的子pom应该只包含您想要的依赖关系的groupId和artifactId。它的版本将由父pom处理。