Skip to content

Latest commit

 

History

History
163 lines (136 loc) · 4.74 KB

统一管理版本号.md

File metadata and controls

163 lines (136 loc) · 4.74 KB

简介

Maven 3.5.0版本提供了一种对<version>标签进行统一管理的特性。在此版本之前的maven项目并不支持这一特性

现在可以在<version>标签中使用${revision}${sha1}${changelist}作为占位符。

单个项目中使用

<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>18</version>
    </parent>
    <groupId>org.apache.maven.ci</groupId>
    <artifactId>ci-parent</artifactId>
    <name>First CI Friendly</name>
	<!-- 设置占位符 -->
    <version>${revision}</version>
    ...
</project>

单个项目中的<version>标签中可以直接使用${revision}${sha1}${changelist}占位符。

(1)执行mvn命令时可以手动指定环境变量来更改占位符的值。如:

mvn -Drevision=1.0.0-SNAPSHOT clean package

(2)当前项目的根目录下创建.mvn文件夹,并在该文件夹下创建maven.config文件,在该文件中配置我们在执行mvn命令时额外的参数,如:.mvn/maven.config

-Drevision=2.0.0-SNAPSHOT

通过编写上面的文件,我们可以直接使用命令,而无需指定手动指定占位符的值。

mvn clean package

(3)在pom.xml文件中设置<properties>标签,指定占位符的值。

<properties>
    <revision>3.0-SNAPSHOT</revision>
</properties>

注:${revision}${sha1}${changelist}可以单独使用,也可以混合使用。

多模块项目中使用

多模块项目中使用占位符和单模块项目中一致,父项目类似于:

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>18</version>
  </parent>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-parent</artifactId>
  <name>First CI Friendly</name>
  <version>${revision}</version>
  ...
  <properties>
    <revision>1.0.0-SNAPSHOT</revision>
  </properties>
  <modules>
    <module>child1</module>
    ..
  </modules>
</project>

子项目类似于:

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.maven.ci</groupId>
    <artifactId>ci-parent</artifactId>
    <version>${revision}</version>
  </parent>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-child</artifactId>
   ...
</project>

依赖

在多模块项目中,经常会在模块之间互相定义依赖。定义依赖项及其相应版本的常用方法是使用${project.version},并且此方法没有更改。如果尝试使用${revision}替代${project.version},将会在构建时发生错误。

子项目之间的依赖应该像下面这样:

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.maven.ci</groupId>
    <artifactId>ci-parent</artifactId>
    <version>${revision}</version>
  </parent>
  <groupId>org.apache.maven.ci</groupId>
  <artifactId>ci-child</artifactId>
   ...
  <dependencies>
	<dependency>
      <groupId>org.apache.maven.ci</groupId>
      <artifactId>child2</artifactId>
      <!-- 不能使用 ${revision} -->  
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</project>

Install / Deploy

安装本地和发布到远程仓库,必须使用flatten-maven-plugin插件。否则安装到仓库的文件无法被maven使用。

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>flatten-maven-plugin</artifactId>
            <version>1.1.0</version>
            <configuration>
                <updatePomFile>true</updatePomFile>
                <flattenMode>resolveCiFriendliesOnly</flattenMode>
            </configuration>
            <executions>
                <execution>
                    <id>flatten</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>flatten</goal>
                    </goals>
                </execution>
                <execution>
                    <id>flatten.clean</id>
                    <phase>clean</phase>
                    <goals>
                        <goal>clean</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

**注:**在使用该插件进行构建时,会在项目目录下增加.flattened-pom.xml文件,该文件为临时文件,在使用版本管理工具时,可以将该文件忽略。