【问题标题】:Maven pom relocationMaven pom 搬迁
【发布时间】:2015-05-07 01:21:25
【问题描述】:

Maven POM 重定位

是否可以将 POM(不是罐子)重新定位到新的 groupIdartifactId?我能够使用重定位 POM 重定位 jar,但无法重定位我们用来进行依赖管理的 POM。

【问题讨论】:

  • com.my.groupmyartifacts1.0pom import
  • 我希望上述 POM 自动重定向到新位置。我尝试了相同的技术(使用distributionManagement/relocation)来重新定位jar,但它似乎不适用于POM。

标签: maven


【解决方案1】:

以下来自docs:

  • 将所有与 foo 相关的文件从 Maven 存储库中的 /bar/foo/ 复制到一个临时位置。
  • 在临时位置的所有 foo 相关的 pom 文件中将 groupId 更改为 org.bar。
  • 将所有文件从临时位置复制到 Maven 2 存储库中的 /org/bar/foo/。
  • 为 Maven 2 存储库中的每个旧版本的 foo 创建一个最小的 Maven pom 文件。 pom文件只需要包含groupId、artifactId、version和relocation section。

    注意:在将 /bar/foo/ 中的旧 pom 文件替换为这些最小的 pom 文件之前,请确保已进行备份!

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

<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 已更改。我们只需要将已更改的元素添加到重定位元素中。有关重定位元素中允许使用哪些元素的信息,请参阅 pom 参考。

如果您的项目使用 MD5 或 SHA1 校验和,您现在必须为 Maven 存储库中 /bar/foo/ 中的 pom 文件创建新的校验和。如果 pom 文件需要签名,也可以这样做。

如果您的项目与 Central 同步,您现在应该启动该同步。这可能会根据您的项目同步政策自动发生。

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

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

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

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

【讨论】:

  • 感谢您的宝贵时间。不确定您是否清楚地阅读了我的问题。通过按照您在上面复制的相同文档重新定位 jar 类型的工件,我没有问题。我的具体情况是我需要重新定位一个 POM 类型的工件(只是一个 pom),它似乎不起作用。
  • 如果它真的不起作用,如果你能在 jira.codehaus.org/browse/MSITE 中打开一个 isse 那就太好了,也许我们需要将它移动到正确的组件。
猜你喜欢
  • 2013-03-18
  • 2011-10-28
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 2011-05-30
相关资源
最近更新 更多