在我公司的父POM中,指定了我们都使用的公司存储库。这些URL包含服务器名称和课程路径。每次我更改POM时,我都会发布一个新版本。将环境相关参数添加到版本
现在想象一下,托管我们的仓库的服务器将被重命名。我可以更改父POM中的所有URL(不是问题),并发布带有固定URL的新版本。但是我无法更改父POM的现有版本中的URL。
这意味着,我无法重建过去的任何神器。
有没有一些标准的方法来解决这个问题?像:
- 中央属性文件
- 的配置POM具有固定1.0.0快照版本,即得到再版上是否有变化?
在我公司的父POM中,指定了我们都使用的公司存储库。这些URL包含服务器名称和课程路径。每次我更改POM时,我都会发布一个新版本。将环境相关参数添加到版本
现在想象一下,托管我们的仓库的服务器将被重命名。我可以更改父POM中的所有URL(不是问题),并发布带有固定URL的新版本。但是我无法更改父POM的现有版本中的URL。
这意味着,我无法重建过去的任何神器。
有没有一些标准的方法来解决这个问题?像:
如果您在父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/*/*/
你从未除了distMngt在POM放仓库。再次 - 从来没有。 You have burned your POMs forever.这存在于Maven中,因为回购经理当时并不存在。多年来这是不好的做法,应该删除。
始终使用带回购组的Nexus实例。这将被添加到您的settings.xml
,这将反映一切。
对于那些不相信,我是漫长的一年的Maven提交者。
好吧,好吧,我相信你:)但是,这样如何:我为每个JBoss版本都有一个存储库。每个项目应该使用OLNY(对应于项目的JBoss版本)。另外,我希望避免每次新的jboss版本到达时更新所有开发人员的所有settings.xml。 –
@BorisBrodski这是一个大脑死亡的方法。回购可以托管尽可能多的版本,只要你喜欢。即使您选择了我不建议的路线,也请告诉您的Nexus管理员代理这些回购并将这些代理添加到公共组中。你的开发者甚至不会注意到这一点。它会工作。充其量,您可以为Nexus中的这些回购库创建路线目标。 –
使所有回购项目都可用,使得使用错误版本变得非常容易。我想确保项目使用的只有依赖关系,以后可以通过JBoss获得。如果使用了版本范围(比如,经常在p2版本中),那么添加新版本可能会破坏旧版本。任何想法?谢谢!! –
,我们采用在工作中的另一种方法是用参数来替换<distributionManagement>
的URL,就像这样:
<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
。
如果您不能修改settings.xml
您可以随时复制它,更改副本并使用-s
标志指出新的设置文件。
此方法也适用于<scm>
标签。
你用项目提交你的'settings.xml'? (否则,你可以检出一个旧标签并将其部署到新的URL。) –
不,绝对不是。设置文件通常包含身份验证凭证,您不希望将其添加到您的VCS中。你提到的方法不是很好的做法。假设您签出一个旧标签并更改设置文件。如果您提交,则构建与标记不相同。如果你不承诺,那么你已经建立你不能重现。 Maven的原则之一是确保你有可重复的构建。 – Daniel
好吧,现在我明白你的意思了。我想到的主要是这种方法。可悲的是,'settings.xml'结合了用户和项目首选项。我将尝试使用全局和用户的'settings.xml'文件来分离这些概念。我将为所有用户提供相同的全局'settings.xml'和URL(可能通过一些共享网络目录)。 –
这不是最好的策略。 –
该公司的DNS不合作:(。我在这里看到的唯一方法是将别名放入所有开发人员PC的lmhosts中。但这不是一个很好的解决方案,恕我直言。 –
我认为我们不能触摸settings.xml –