我正在尝试将构建包从我们的本地 Nexus Repository Manager 迁移到 Azure Artifacts。我发现这个Microsoft链接解释了如何使用Powershell脚本为NuGet(.NET包管理器)执行此操作,但Maven没有这样的工具。
我正在考虑使用“maven cleancompile”检索所有构建文件,然后将我的 pom.xml 文件指向 Azure Artifacts,然后以某种方式推送它们。然而,包的数量达到了100k,并且有很多应用程序使用它。所以这感觉是一种非常笨拙的方法,需要付出很大的努力,并且有很大的出错空间。
有人对我有什么建议吗?
事实证明我的问题主要是由于我对 Artifact repos 和项目依赖链的理解有限造成的。显然,Artifact 存储库会缓存所有上游存储库,因此这就是其中有 100k 个文件的原因。最终只有两个公司特定的依赖项需要移动。
我按照以下方式完成了迁移(适用于所有 Maven 迁移):
克隆链中最高的依赖项。 (可能包含带有公共名称或父名称的名称)
将 Azure Artifacts 配置添加到 ${USER_HOME}/.m2/settings.xml 和 pom.xml,如下所述:https://robeco.visualstudio.com/Delivery%20Integration%20Services/_packaging?_a=connect&feed=Maven-喂食
从当前存储库检索依赖项
mvn install
mvn package
创建发布版本(后面不带-SNAPSHOT)并将其推送到Azure Artifacts (否则你会得到 Can't release project due to nonreleased dependency 错误)
mvn release:clean
mvn release:prepare
mvn release:perform
现在您已经有了 robeco-common-version1.0.16 版本。现在将其部署到 Azure Artifacts
mvn deploy
您应该看到类似上传到 Maven-feed 的内容:https://robeco.pkgs.visualstudio.com/....
对所有后续公司特定的依赖项执行相同的步骤。
我花了很长时间寻找这个问题的答案,我什至放弃了并得出结论MS不支持从其他产品迁移!
但这似乎是一个错误的问题对正确的问题的情况。 正确的问题是“如何将外部库发布到 Azure Artifacts” - 如果可以做到这一点,则可以上传任何工件。
下面的解决方案通过本地
.m2
存储库传输工件,因此您需要一个有效的开发环境(安装 Maven、签出项目等)。
我已从 Artifactory 迁移,但同样的过程也适用于 Nexus。
1。将您的 pom 连接到现有存储库管理器和 Azure Artifacts。
您的 pom 应该已经有一个条目可以从现有存储库管理器下载工件。
在分发管理中添加与 Azure Artifacts 的连接。
DevOps 中的说明遗漏了一个关键步骤。
Maven 需要 Azure 的 SSL 证书才能建立 https 连接。
按照 这些说明 从 Azure 下载
.crt
文件并导入到 Java 的密钥库中,以便 Maven 可以使用它。
repositories
和
distributionManagement
部分应如下所示:
<repositories>
<repository>
<id>artifactory</id>
<url>https://my_company/artifactory/libs-release</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>my_project</id>
<url>https://pkgs.dev.azure.com/my_company/my_project/_packaging/my_project/maven/v1</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</distributionManagement>
注意:如果存储库部分中有 Azure Artifacts 条目,则无需将其删除。我没有在这里显示它,因为迁移不需要它。
2。将工件从现有存储库管理器下载到本地 .m2/repository 文件夹。
在项目的根文件夹中运行以下命令,更改组 id 和工件 id 以匹配您的项目:
mvn dependency:get -DgroupId='com.my_company' -DartifactId='my_project' -Dversion='0.1'
您需要循环浏览所有版本号。我在文本编辑器中使用宏来生成命令列表,或者您可以使用 sh/bat 脚本。
3.将这些工件上传到 Azure Artifacts。
在项目的根文件夹中运行以下命令,更改 .m2 文件夹的路径、存储库 id、url、组 id 和工件 id 以匹配您的项目:
mvn org.apache.maven.plugins:maven-deploy-plugin:2.4:deploy-file -Dpackaging=jar -DrepositoryId='my_project' -Durl=https://pkgs.dev.azure.com/my_company/my_project/_packaging/my_project/maven/v1 -DgroupId='com.pd4ml.utilities' -DartifactId='pd4ml' -Dversion='1.0' -Dfile=C:\Users\Steve\.m2\repository\com\pd4ml\utilities\pd4ml\1.0\pd4ml-1.0.jar -DpomFile=C:\Users\Steve\.m2\repository\com\pd4ml\utilities\pd4ml\1.0\pd4ml-1.0.pom
同样,您需要循环遍历所有版本号。
如果单击包的名称,然后导航到“版本”,您将看到此工件的所有版本。
https://github.com/reegan-anne/nexus_to_artifacts,正是我想要的,希望它对其他人有帮助.