在我公司的父POM中,我指定了我们都使用的公司存储库。 URL包含服务器名称和路径。每次我更改POM时,我都会发布一个新版本。
现在想象一下,托管我们的repos的服务器会被重命名。我可以更改父POM中的所有URL(不是问题)并发布具有固定URL的新版本。但我不能更改现有版本的父POM中的URL。
这意味着,我无法重建过去的任何工件。
有没有一些标准的方法可以解决这个问题?像:
答案 0 :(得分:2)
您从不在您的POM中放置除distMngt之外的存储库。再次 - 从不。 You have burned your POMs forever.这在Maven中存在,因为当时的回购经理并不存在。多年来这是不好的做法,应该被删除。
始终将Nexus实例与repo组一起使用。这将被添加到settings.xml
,这将反映所有内容。
对于那些不相信的人,我是Maven的漫长岁月。
答案 1 :(得分:1)
如果您在父pom中使用存储库并且可能会随着时间的推移而改变,那么最好的策略是在URL中,或者它使用ALIAS(DNS,Apache重定向,重写),特别是不直接使用IP地址,而您不必每次都更改存储库的地址。
示例:
<repositories>
<repository>
<id>myrepo</id>
<url>http://myrepo.me/content/repositories/public/</url>
</repository>
</repositories>
和
http://myrepo.me/content/repositories/public/ => ip address 1.2.3.4/*/*/
答案 2 :(得分:1)
我们在工作中采用的另一种方法是使用参数替换<distributionManagement>
中的网址,如下所示:
<distributionManagement>
<repository>
<id>my-repo</id>
<name>My Release Repo</name>
<url>${url.deploy.releases}</url>
</repository>
<snapshotRepository>
<id>my-repo</id>
<name>My Release Repo</name>
<url>${url.deploy.snapshots}</url>
</snapshotRepository>
</distributionManagement>
这样,我们使用settings.xml
来控制应该部署工件的位置。这样做的好处是,如果您迁移了一个存储库(我们这样做了),您只需更新settings.xml
即可获得新版本/版本。
如果您需要返回到早期版本并重新发布(无论出于何种原因),只需检查发布代码,设置settings.xml
以指向新的代表并执行mvn clean deploy
。< / p>
如果您无法修改settings.xml
,则可以随时复制它,更改副本并使用-s
标记指出新设置文件。
此方法也适用于<scm>
代码。