1

问题:

在导入 maven 工件存储库时(例如,来自 Artifactory 的其他实例或 nexus),许多工件(以及大多数父级)pom 包含引用旧存储库的 url 标签。这些 url 标签在distributionManagementandrepositories标签内。

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

更多信息:

我们正在将一些工件存储库迁移到一个全新的环境。我们有一个旧的 Artifactory 实例和一个来自单独项目的 Nexus 实例,我们需要将它们迁移到新环境中的单个 Artifactory 实例中。我们目前无权从 Nexus 存储库运行 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 实例时)

4

2 回答 2

3

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

Artifactory 将自动从您的 pom 文件中删除任何<repositories>引用,将解析规则留给您的settings.xml. 您需要做的就是从您的新 Artifactory生成一个新settings.xml文件,所有的分辨率都将由此产生。

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

于 2013-10-23T07:50:13.283 回答
1

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

DistributionManagement 详细说明了组件发布到的位置。由于组件已经发布并且在您的 repo 服务器中,内容并不重要。

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

如您所见,您可以只迁移组件并将它们单独放置。修改已发布组件的 pom 可能是一种不好的做法,因为这意味着一些客户端将有一个 pom,而另一些客户端将有一个用于 SAME 工件的不同的 pom。这违反了不改变发布工件的想法,并可能导致问题。

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

于 2013-10-24T05:03:53.373 回答