问题:
导入maven工件存储库时(例如,来自Artifactory或nexus的其他实例),许多工件(和大多数父级)poms包含引用旧存储库的url标记。这些网址标记位于distributionManagement
和repositories
标记内。
我们是否需要经历一个耗时的过程,为每个工件(以及父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实例时)而成为问题
答案 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管理器中拥有所有组件。