用法

准备您的项目以使用 maven-release-plugin

为了能够从 maven-release-plugin 开始,您应该在我们的 pom 中包含两件事:

  • 带有developerConnectionscm部分
  • 带有锁定版本的 maven-release-plugin

developerConnection包含指向包含此pom.xml的文件夹的源代码控制管理系统的URL。此 URL 以scm:[scm-provider]为前缀,因此插件可以选择正确的实现来提交和标记。Maven SCM -page 包含所有受支持的SCM 的概述,每个 SCM 您可以看到 URL 的外观。

<project>
  ...
  <scm>
    <developerConnection>scm:svn:https://svn.mycompany.com/repos/myapplication/trunk/mycomponent/</developerConnection>
  </scm>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>3.0.0-M5</version>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>


以下是准备发布时的一些常见场景。

在 SCM 服务器中使用与操作系统中不同的用户名

大多数 SCM 只是作为系统上当前用户的外部命令执行。如果此用户名与 SCM 用户名不同,您可能需要设置以下选项:

mvn -Dusername=your_scm_username release:prepare

设置在 Subversion 中标记文件的位置

这个例子展示了如何为要在 Subversion 中创建的所有标签设置存储库位置。请注意,如果您使用标准 SVN 布局,则不需要这样做,其中根项目位于trunk中,并且有一个兄弟标签目录。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>3.0.0-M5</version>
        <configuration>
          <tagBase>https://svn.mycompany.com/repos/myapplication/releases</tagBase>
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>

做空跑

由于发布插件执行了许多更改项目的操作,因此在大发布之前或在新项目上进行试运行可能是明智之举。为此,提交所有文件,就像您即将运行完整版本并运行:

mvn release:prepare -DdryRun=true

这将询问所有相同的问题,运行相同的测试,并输出 POM 在转换后的外观副本。您可以检查输出并查看 POM,然后运行:

mvn release:clean

这将删除上面创建的所有文件,项目将准备好执行正确的发布。

以批处理模式运行

有时需要定期执行提交/标记过程(例如,通过构建服务器生成夜间或集成构建)。要使用版本和标签信息的默认输入而不提示任何值,请使用 Maven 的--batch-mode设置:

mvn --batch-mode release:prepare

使用临时存储库

有时需要部署预发布以在公开可用之前获得批准。一种选择是使用release:perform目标创建候选发布版本,但最终部署的工件将不是已被批准为 RCx 的确切工件。

一个常见的解决方案是使用暂存存储库,其中部署了测试版本及其文档以供审查。如果一切正常,则将其复制到公共存储库。使用这种策略,经过测试的工件就是部署的工件。

release:stage目标使用此策略。它取代了release:perform目标并执行相同的任务,但需要一个stagingRepository参数。它将自动重新配置部署站点部署目标以使用暂存策略。

发布完成后,release.properties和其他发布文件不会被删除,因此如果检测到一些错误,您仍然可以执行release:rollback,并且必须在一些修复后创建新的候选者。您只需在 SCM 中使用不同的标签,或者如果 SCM 提供程序支持重命名标签,则重命名已创建的标签。