Maven:引用父pom时重用单个版本定义

时间:2016-06-15 11:09:43

标签: maven maven-3

我有以下pom定义(底部)。

我有很多子poms(50个项目),要求我更新每个版本的所有poms,例如,从1.0移动到1.1时。

如何在一个地方定义版本,并在所有poms中重复使用?

编辑 - 关于请求的一些动机:我希望在切换版本时尽可能减少占用空间。随着小文件的改变。因为很少提交推动。等

编辑 - 在加载父级之前无法使用父级属性。

<parent>
    <groupId>info.fastpace</groupId>
    <artifactId>parent</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>child-1</artifactId>

3 个答案:

答案 0 :(得分:1)

我可以使用父级的属性,并使用相对路径而不是版本来引用父级。例如:

<强>父:

<groupId>info.fastpace</groupId>
<artifactId>parent</artifactId>
<version>${global.version}</version>

<properties>
   <!-- Unique entry point for version number management --> 
   <global.version>1.0-SNAPSHOT</global.version>
</properties>

儿童:

<parent>
    <groupId>info.fastpace</groupId>
    <artifactId>parent</artifactId>
    <version>${global.version}</version>
    <relativePath>..</relativePath>
</parent>

<artifactId>child-1</artifactId>

缺点:要求父pom存在于文件系统中,并使所有开发人员使用相同的相对文件结构。

查看更多信息here

答案 1 :(得分:0)

您可以使用maven属性构建单个版本编号方案。 像这样:

<properties>
<my.version>1.1.2-SNAPSHOT</my.version>
</properties>

然后像这样引用它:

<version>${my.version}</version>

点击此处了解更多信息: Maven version with a property

答案 2 :(得分:-1)

如果您具有同一版本的多个依赖项,则建议使用属性。例如:

<project>
    ...
    <properties>
        ...
        <dep.jooq.version>3.7.3</dep.jooq.version>
        ...
    </properties>
    ...
    <dependencies>
        ...
        <dependency>
            <groupId>org.jooq</groupId>
            <artifactId>jooq</artifactId>
            <version>${dep.jooq.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jooq</groupId>
            <artifactId>jooq-meta</artifactId>
            <version>${dep.jooq.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jooq</groupId>
            <artifactId>jooq-codegen</artifactId>
            <version>${dep.jooq.version}</version>
        </dependency>
        ...
    </dependencies>
    ...
</project>

相反,如果您必须在POM文件中的不同点使用相同的依赖项,或者如果您在模块中并且您将使用父项的相同依赖项版本,我建议使用以下方式:

<project>
    ...
    <dependencyManagement>
        <dependencies>
            ...
            <dependency>
                <groupId>group-a</groupId>
                <artifactId>artifact-a</artifactId>
                <version>1.0</version>
            </dependency>
            ...
        <dependencies>
    </dependencyManagement>
    ...
    <dependencies>
        ...
        <!-- The following block could be in a module -->
        <dependency>
            <groupId>group-a</groupId>
            <artifactId>artifact-a</artifactId>
            <!-- It is no more ncessary to use the version -->
        </dependency>
        ...
    <dependencies>
    ...
</project>