执行 Maven 项目发布

本文档涵盖了 Maven 团队用于执行发布的常见发布过程。

先决条件

请确保:

  • 你有一个最近安装的 Git 客户端并在你的 shell 路径上。
  • 你已经安装了 JDK 8 并且在你的 shell 路径上构建 Maven 3.7.0+。可以在此处找到有关构建适当版本的最低 JDK 版本的详细信息:https ://maven.apache.org/docs/history.html
  • 如果在构建过程中收到 OutOfMemoryError,请确保已设置环境变量MAVEN_OPTS=-Xmx512m
  • 您必须使用 Maven 3.3.9+。
  • 遵循Publishing Maven Artifacts中概述的 Apache 环境配置步骤。

在你开始之前

如果您从这里开始,您可能首先想查看以下文档之一,这些文档涵盖了我们在 Maven 项目中拥有的各种类型的发布的细节:

考虑更新父版本

如果您计划发布的项目未使用其父项的最新版本(请参阅父 POM索引),请考虑借此机会对其进行更新。

确保网站编译和发布工作正常

特别是如果您更新父级(但有时在其他情况下),站点编译过程可能会失败,或者显示明显的错误,或者部署到错误的位置。* 在您发布版本之后* 发现这一点,然后尝试按照流程部署站点以供审核,这是一种压力且耗时的过程。因此,您可能会发现在开始之前检查站点的状态会更愉快。

分阶段发布

  1. 遵循发布 Maven 发布中概述的发布准备、暂存和关闭存储库步骤。
  2. 按照部署 Maven 组件参考文档中的说明暂存最新文档。

发起投票

提议对包含已关闭问题、遗留问题、暂存存储库和暂存站点的开发列表进行投票。例如:

To: "Maven Developers List" <dev@maven.apache.org>
Subject: [VOTE] Release Apache Maven XXX Plugin version Y.Z

Hi,

We solved N issues:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=XXXXXX&version=YYYYYYY&styleName=Text

There are still a couple of issues left in JIRA:
https://issues.apache.org/jira/issues/?jql=project%20%3D%20XXXXXXXXXX%20AND%20resolution%20%3D%20Unresolved%20ORDER%20BY%20key%20DESC%2C%20priority%20DESC

Staging repo:
https://repository.apache.org/content/repositories/maven-[YOUR REPOSITORY ID]/
https://repository.apache.org/content/repositories/maven-[YOUR REPOSITORY ID]/[PATH-TO]-source-release.zip

Source release checksum(s):
[NAME-OF]-source-release.zip sha512: [SHA512SUM]

Staging site:
https://maven.apache.org/plugins-archives/maven-XXX-plugin-LATEST/

Guide to testing staged releases:
https://maven.apache.org/guides/development/guide-testing-releases.html

Vote open for at least 72 hours.

[ ] +1
[ ] +0
[ ] -1

要获取 JIRA 发布说明链接,请浏览到插件或组件的 JIRA 页面,选择路线图链接,然后使用指向正在发布版本旁边的发布说明的链接。

要获取 JIRA 中遗留的问题列表,请浏览到插件或组件的 JIRA 页面,然后从右侧的预设过滤器中,使用未决问题的链接。

投票至少开放 72 小时意味着您需要等待至少 72 小时才能继续进行。这让其他人有时间测试您的版本并检查一切是否正常。如果在那之后您收到的 +1 票数不足以达到法定人数,这并不意味着投票失败。只是需要更长的时间。

查看投票结果

复制自对包发布的投票

Votes on whether a package is ready to be released use majority approval
-- i.e. at least three PMC members must vote affirmatively for release,
and there must be more positive than negative votes. Releases may not be vetoed.
Generally the community will cancel the release vote if anyone identifies serious problems,
but in most cases the ultimate decision, lies with the individual serving as release manager.
The specifics of the process may vary from project to project,
but the 'minimum quorum of three +1 votes' rule is universal.

PMC 成员列表可在https://people.apache.org/committers-by-project.html#maven-pmc获得。

投票成功后,将结果发布到开发列表并抄送 PMC。例如:

To: "Maven Developers List" <dev@maven.apache.org>
CC: "Maven Project Management Committee List" <private@maven.apache.org>
Subject: [RESULT] [VOTE] Release Apache Maven XXX Plugin version Y.Z

Hi,

The vote has passed with the following result:

+1 : <<list of names>>

PMC quorum: ...

I will promote the source release zip file to Apache distribution area and the artifacts to the central repo.

如果投票不成功,则需要重新启动该过程。务必:

将源版本复制到 Apache 分发区

官方 Apache 版本是 'source-release' 包分发www.apache.org/dist,如Apache 版本分发策略中所述。Maven 的所有发布都必须复制到官方的 Maven 发布区

发布区域由 svnsubpub 维护。要发布版本,请将其添加到dist 区域的 subversion 存储库target/checkout/target/:添加版本、其签名和 sha512 校验和文件,从步骤创建的目录中复制它们mvn release:perform。目前这需要在 maven-pmc 组中(请参阅INFRA-5945)。如果您不是 PMC 成员,请发送邮件至private@maven.apache.org并要求他们为您执行此步骤(以及下一步):PMC 成员将从 Nexus staging 获取源发布包及其签名存储库并将手动创建 sha512 校验和文件,例如使用 shell:

for f in *.zip ; do echo -n $(sha512sum $f | cut -c -128) > $f.sha512 ; done

例如:

wagon/wagon-2.2-source-release.zip
wagon/wagon-2.2-source-release.zip.asc
wagon/wagon-2.2-source-release.zip.sha512

您还应该根据需要运行“svn rm”以清除旧版本。根据发布政策,只有分支上的最新版本才应该保留在主要的 dist 区域中。只要之前的版本至少存在一天,自动存档器就会将其复制到存档中。

为了检查 dist 区域中的一切是否正常,dist-tool-plugin 已编写并每天运行一次以生成“检查源代码发布”和“检查错误”报告

添加下一个董事会报告的发布

提交 3 个源发布文件后,访问Apache Committee Report Helper添加您的发布数据以及完整版本名称和发布日期。(您也会收到一封电子邮件)。

如果您不是 PMC 成员,请发送邮件至private@maven.apache.org,如果他们在添加到发布区域时没有进行更新,请他们为您执行此步骤。

推动发布

一旦该版本被认为适合公共消费,它就可以转移到生产存储库,所有用户都可以使用它。

  1. 有关促销的详细信息,请参阅促进回购
  2. 部署当前网站

    如上所述,如果合适,部署网站并为新版本更新项目站点:使用组件参考文档帮助器生成命令或查看发布版本化组件参考文档以获取解释。请注意,并非所有项目都完全遵循这些约定。

    如果有一个带有版本的概览表(例如pluginsshared),您可以直接在 github 页面上对其进行编辑。

  3. 更新 JIRA 中的版本跟踪

    在相关项目中,转到管理,然后转到版本。将版本标记Y.Z为“已发布”。创建版本Y.Z+1,如果尚未完成。此时,您还可以归档任何已弃用的版本(里程碑或 Alpha 版)。

    注意:目前这需要在 maven-pmc 组中。因此,如果您在 JIRA 中看不到管理选项,请联系 private@maven.apache.org为您执行此步骤。

  4. 等待一切同步
    1. 同步到Maven 中心

      从 repository.apache.org 同步到中央登台每 4 小时发生一次。有一个单独的每小时计划运行,它从登台推送到其他中央机器,然后更新索引。

    2. 同步到 Maven 网站

      如果你发布的项目还没有使用 svnpubsub 进行站点部署,那么 Maven 网站的部署需要一个小时左右才能同步

  5. 创建公告。

    针对插件完成了以下说明:如果您发布的不是插件,您应该调整电子邮件内容以匹配您发布的内容。

    1. 使用 Maven 更改插件

      如果您要发布插件或共享组件,您可以让 Maven Changes Plugin为您生成,甚至最终发送通知。首先确保您已在提交者设置中配置了必要的属性。

      cd target/checkout
      mvn changes:announcement-mail -Papache-release

      如果发送邮件失败,生成的通知可在target/announcement(参见 参考资料announcement.vm)中找到,您可以将其用作手动发送邮件的基础。

      如果您的 SMTP 服务器需要身份验证,您需要为其添加命令行选项:

      cd target/checkout
      mvn changes:announcement-mail -Dchanges.username=<SMTP-USERNAME> -Dchanges.password=<SMTP-PASSWORD> -Papache-release
    2. 手动

      注意:您必须从您的 apache 电子邮件帐户发送此电子邮件,例如 YOUR_APACHE_USERNAME@apache.org 否则发送至announce@maven.apache.org 的电子邮件将被退回。

      From: YOUR_APACHE_USERNAME@apache.org
      To: announce@maven.apache.org, users@maven.apache.org
      Cc: dev@maven.apache.org
      Subject: [ANN] Apache Maven XXX Plugin Y.Z Released
      
      The Apache Maven team is pleased to announce the release of the Apache Maven XXX Plugin, version Y.Z
      
      This plugin (insert short description of the plugin's purpose).
      
      https://maven.apache.org/plugins/maven-XXX-plugin/
      
      You should specify the version in your project's plugin configuration:
      
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-XXX-plugin</artifactId>
        <version>Y.Z</version>
      </plugin>
      
      You can download the appropriate sources etc. from the download page:
      
      https://maven.apache.org/plugins/maven-XXX-plugin/download.cgi
      
      Release Notes - Maven XXX Plugin - Version Y.Z
      
      (Copy Here Release Notes in Text Format from JIRA)
      
      Enjoy,
      
      -The Apache Maven team
      
  6. 如果释放 Apache Parent POM,请通知 release-discuss@apache.org

    有几个项目遵循此列表,并且应该注意对共同父项的更改。如果其他共享资源被释放,或者插件版本对该组特别感兴趣,这也可能是一个步骤。

    如果发布 Maven Core,请通知announce@apache.org

  7. 庆祝:o)