Maven多模块结构下版本管理的正确姿势(CI Friendly Versions) - ${revision}

在使用Maven多模块结构工程时,配置版本是一个比较头疼的事。继承版本,依赖版本,自身版本,都需要单独定义,很是麻烦。但其实Maven已经提供了这种CI版本的管理方式,下面来介绍具体用法。

从Maven 3.5.0-beta-1版本开始,就可以使用{sha1} 和 ${changelist}作为占位符来替换pom文件了。

单模块项目

<project>
  <modelVersion>4.0.0modelVersion>
  <parent>
    <groupId>org.apachegroupId>
    <artifactId>apacheartifactId>
    <version>18version>
  parent>
  <groupId>org.apache.maven.cigroupId>
  <artifactId>ci-parentartifactId>
  <name>First CI Friendlyname>
  <version>${revision}version>
  ...
project>

这种情况比较简单,只使用了${revision}来替换版本。

还可以用另一种动态添加参数的方式来指定版本

$ mvn -Drevision=1.0.0-SNAPSHOT clean package

-D代表设置环境变量

-D,–define Define a system property

多模块项目

现在来看看多模块构建的情况。有一个父项目和一个或多子模块。父pom将如下所示:

<project>
  <modelVersion>4.0.0modelVersion>
  <parent>
    <groupId>org.apachegroupId>
    <artifactId>apacheartifactId>
    <version>18version>
  parent>
  <groupId>org.apache.maven.cigroupId>
  <artifactId>ci-parentartifactId>
  <name>First CI Friendlyname>
  <version>${revision}version>
  ...
  <properties>
    <revision>1.0.0-SNAPSHOTrevision>
  properties>
  <modules>
    <module>child1module>
    ..
  modules>
project>

子模块配置:

<project>
  <modelVersion>4.0.0modelVersion>
  <parent>
    <groupId>org.apache.maven.cigroupId>
    <artifactId>ci-parentartifactId>
    <version>${revision}version>
  parent>
  <groupId>org.apache.maven.cigroupId>
  <artifactId>ci-childartifactId>
   ...
project>

install/deploy

如果使用以上设置来发布,必须使用flatten-maven-plugin

<project>
  <modelVersion>4.0.0modelVersion>
  <parent>
    <groupId>org.apachegroupId>
    <artifactId>apacheartifactId>
    <version>18version>
  parent>
  <groupId>org.apache.maven.cigroupId>
  <artifactId>ci-parentartifactId>
  <name>First CI Friendlyname>
  <version>${revision}version>
  ...
  <properties>
    <revision>1.0.0-SNAPSHOTrevision>
  properties>

 <build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojogroupId>
      <artifactId>flatten-maven-pluginartifactId>
      <version>1.1.0version>
      <configuration>
          是否更新pom文件,此处还有更高级的用法
        <updatePomFile>trueupdatePomFile>
        <flattenMode>resolveCiFriendliesOnlyflattenMode>
      configuration>
      <executions>
        <execution>
          <id>flattenid>
          <phase>process-resourcesphase>
          <goals>
            <goal>flattengoal>
          goals>
        execution>
        <execution>
          <id>flatten.cleanid>
          <phase>cleanphase>
          <goals>
            <goal>cleangoal>
          goals>
        execution>
      executions>
    plugin>
  plugins>
  build>
  <modules>
    <module>child1module>
    ..
  modules>
project>

最终执行install/deploy后,会将该模块的pom文件中的${revision}替换为实际的版本。

参考

https://maven.apache.org/maven-ci-friendly.html
https://github.com/spring-projects/spring-boot
https://www.mojohaus.org/flatten-maven-plugin/

你可能感兴趣的:(Maven)