迁移maven工件存储库 - pom <url>值指向旧存储库</url>

时间:2013-10-23 02:33:16

标签: maven migration pom.xml nexus artifactory

问题:

导入maven工件存储库时(例如,来自Artifactory或nexus的其他实例),许多工件(和大多数父级)poms包含引用旧存储库的url标记。这些网址标记位于distributionManagementrepositories标记内。

我们是否需要经历一个耗时的过程,为每个工件(以及父pom,如果适用)更新这些网址?

更多信息:

我们正在将一些工件存储库迁移到一个全新的环境。我们有一个旧的Artifactory实例和一个来自单独项目的Nexus实例,我们需要将它迁移到新环境中的单个Artifactory实例中。我们目前无权访问Nexus repo中的maven构建版本 - 我们只能访问其文件系统来提取文件。

新Artifactory版本比旧版本更新,因此我们使用以下过程:

1. system export excluding binaries
2. copy filestore directory across to new Artifactory server
3. imported the system export

对于Nexus,我们将每个存储库的文件系统发送到新的Artifactory服务器,并使用“从路径导入存储库”功能。

这些导入都已成功完成,我们可以在新的Artifactory实例中看到所有必需的工件。

我们已经成功执行了一个maven构建,该构建下拉了从旧Artifactory实例导入的依赖项,同样的构建也成功地将它的工件发布回新的Artifactory实例。

鉴于我们迄今为止的成功测试,我们不确定是否真的需要更新它们,或者它们是否会因某些原因(例如当我们停用旧的Artifactory实例时)而成为问题

2 个答案:

答案 0 :(得分:3)

你很幸运在新环境中使用Artifactory:)

Artifactory将automatically remove any <repositories> references from your pom files,将解决方案规则留给您的settings.xml。您需要做的只是generate a new settings.xml file from your new Artifactory,所有解决方案都将从中发生。

为了使其工作,请将旧Artifactory和Nexus声明为新Artifactory实例的远程存储库(不要使用export / import)。一旦新Artifactory从旧Artifactory或Nexus获取工件,它将删除存储库声明并将新的,干净的pom存储在缓存中。 一段时间后,当您确定所有内容都已缓存时,您可以停用旧服务器并将这些存储库声明为脱机(可选择将工件移动到本地存储库)。

答案 1 :(得分:1)

存储库和distribitionManagement都不会影响您对组件的使用,因此无需在导入时执行任何操作。

发布组件的distributionManagement详细信息。由于该组件已经发布,因此在您的repo服务器中,内容无关紧要。

将存储库作为pom文件中的元素是一种非常糟糕的做法,应该避免使用。但是,如果您使用repo管理器并使用settings.xml中的mirrorOf设置进行适当的设置,则不会考虑任何存储库,而是按照settings.xml中的定义联系您的repo管理器。

正如您所看到的,您可以只迁移组件并将它们留下。修改已发布组件的poms可能是一种不好的做法,因为这意味着某些客户端将拥有一个pom,而其他客户端将拥有另一个用于SAME工件的pom。这违反了不变的发布工件的想法,并可能导致问题。

在迁移方面,您可以轻松地迁移Nexus中的存储库并关闭旧服务器(至少可以迁移到Nexus)。这样您就不必并行运行其中的一些并且可以快速停用,同时确保在新的repo管理器中拥有所有组件。