搬迁指南

有时需要重新定位存储库中的工件。一个例子是当一个项目从一个 groupId 移动到另一个 groupId 时。

对存储库进行更改可能会产生深远的影响。所以最好在第一时间就做好,因此本指南。

2020 年返工正在进行中,请参阅开发邮件列表上的讨论,仍然需要分析问题,定义改进,当然还有实施......

如何将 Maven 2 工件重新定位到不同的 groupId

下面示例的目标是让foo项目将其 groupId 从 重新定位barorg.bar

处理过去的版本

  1. 将 Maven 2 存储库中的所有foo相关文件复制/bar/foo/到临时位置。
  2. org.bar在临时位置的所有foo相关 POM 文件中将groupId 更改为。
  3. 将所有文件从临时位置复制到/org/bar/foo/Maven 2 存储库中。
  4. 为 Maven 2 存储库中的每个旧版本创建一个最小的 Maven 2 POM 文件foo。POM 文件只需要包含groupId、、artifactIdversion重定位部分。

    注意:/bar/foo/用这些最小的 POM 文件替换旧的 POM 文件之前,请确保您已进行备份!

    对于 1.0 版,最小的 POM 文件可能如下所示foo

    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>bar</groupId>
      <artifactId>foo</artifactId>
      <version>1.0</version>
      <distributionManagement>
        <relocation>
          <groupId>org.bar</groupId>
        </relocation>
      </distributionManagement>
    </project>

    在这种情况下,我们正在重新定位,因为 groupId 已更改。我们只需要将已更改的元素添加到relocation元素中。有关元素中允许使用哪些元素的信息relocation,请参阅POM 参考

  5. /bar/foo/如果您的项目使用 MD5 或 SHA1 校验和,您现在必须为Maven 2 存储库中的 pom 文件创建新的校验和。如果 POM 文件需要签名,也可以这样做。
  6. 如果您的项目与 Central 同步,您现在应该启动该同步。这可能会根据您的项目同步策略自动发生。

您的foo-artifacts 现在可供具有旧 groupId 和新 groupId 的 Maven 用户使用。使用旧 groupId 的项目将自动重定向到新 groupId 并发出警告,告诉用户更新其依赖项。

发布下一个版本

当下一个版本发布时foo,您应该发布两个 Maven 2 POM 文件:首先您应该foo使用新的 groupId 发布 的 POM org.bar

因为存储库中的数据不应该更改,所以 Maven 不会下载它已经下载的 POM 文件。因此,您还需要为新版本发布带有旧 groupId 的重定位 POM 文件bar:这应该是最小的重定位 POM(如上面第 4 步所述),但对于新版本的foo.

对于之后的发布,您只需要发布一个 groupId 为 的 Maven POM org.bar,因为之前版本的用户已被告知更改了 groupId。

例子

apache蚂蚁

  1. 已将其版本发布到 1.6.5 到 Maven 1 兼容ant:ant坐标(请参阅存储库内容),
  2. 从 1.7.0 开始,移动到反向 DNS 兼容的 Maven 2+org.apache.ant:ant坐标,(参见存储库内容),
  3. 在旧 groupId 中发布了一个ant:ant:1.7.0重定位 POM 以宣传有关移动的信息(请参阅存储库内容)。

请注意,过去的ant:antPOM 版本(直到 1.6.5)没有被修改来宣传这一举动:中央 POM 内容一旦发布就不会改变(因为初始内容已经下载了很多次并且预计不会重新加载之后)。

apache POI

  1. 已将其版本发布到 3.0-alpha-3 到符合 Maven 1 的poi:poi坐标(请参阅存储库内容),
  2. 从 3.0-FINAL 开始,移动到反向 DNS 兼容的 Maven 2+org.apache.poi:poi坐标,(参见存储库内容),
  3. 在旧 groupId 中发布了带有 jar 的重定位 POM,以宣传移动(请参阅存储poi:poi:3.0-FINAL内容
  4. 在旧 groupId 中发布poi:poi了 3.0.1-FINAL、3.0.2-beta1/beta2/FINAL 和 3.1-beta1/beta2/FINAL 的重定位 POM,以宣传迁移(请参阅存储库内容)。