Maven多模块项目版本管理

ano*_*ias 20 java maven

指定多模块maven项目版本的最佳实践是什么?

我想在所有模块中都有一个版本字符串.即使我在根父pom中只能有一个版本定义,我需要在每个pom中指定父pom版本.这意味着,如果我需要更改版本,我需要更改所有poms.实际上违背了目的.有任何想法吗??

sms*_*eck 35

你试过版本maven插件吗?

mvn versions:set -DnewVersion="1.1-SNAPSHOT"您一起能够在所有底层maven项目中设置给定版本.

之后,您必须执行a mvn versions:commit 删除临时文件并提交到VCS

  • 谢谢.是的,这适合我.唯一的缺点是,我需要提交所有pom来源控制,即使是次要版本更改. (2认同)

Ruc*_*era 10

更好的方法是在父pom.xml中定义的版本如下.

<groupId>com.my.code</groupId>
<artifactId>my_pro</artifactId>
<version>${YOUR_VERSION}</version>

<properties>
    <JDK_VERSION>1.7</JDK_VERSION>        
    <YOUR_VERSION>1.0-SNAPSHOT</YOUR_VERSION>// here you define your version
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <org.springframework.version>3.1.2.RELEASE</org.springframework.version>
</properties>
Run Code Online (Sandbox Code Playgroud)

然后,你不想被一个在所有孩子的pom.xml改变你的版本号一个.

child pom.xml可以添加依赖项,如下所示

<version>${YOUR_VERSION}</version>
Run Code Online (Sandbox Code Playgroud)

  • 从maven 3开始,这种方式已被弃用 (9认同)
  • @Ilya那么替代方案是什么?当您只是更换版本号时,必须更换所有儿童poms是一种耻辱! (9认同)

小智 6

另一个"最佳"方法是在多模块pom旁边创建一个父pom,它将提供一个依赖关系管理,其中包含多模块项目引用和它自己的父pom的版本.如果多模块项目需要另一个多模块项目作为依赖项,那么这对您来说是最好的.父pom必须是多模块pom的一部分:

<modules>
    <module>my.parent.Pom</module>
    <module>my.first.project</module>
    <module>my.second.project</module>
    <module>my.third.project</module>
</modules>
Run Code Online (Sandbox Code Playgroud)

父pom应包含多模块项目的依赖关系管理

<version>VersionNumber</version>
<packaging>pom</packaging>
...
...
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>my.first.project</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>my.second.project</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>my.third.project</artifactId>
            <version>${project.version}</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

你的所有多模块项目都不会定义groupId和版本号,因为他们将从父pom获取这些信息,另外如果项目"third"需要依赖my.first.project那么项目"third"pom文件中的依赖项将会:

<dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>my.first.project</artifactId>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

这是我们处理多模块项目和版本管理的方式.

  • 有趣!虽然,我想知道如何在不指定其版本的情况下指定父pom(在其中一个子poms中需要?). (7认同)
  • @anoopelias是的,这也激怒了我,并没有解决你的问题 - 而且我的也是如此.因为你最终遇到同样的问题.你是怎么解决的? (2认同)