2015-10-13 37 views
0

在我公司的父POM中,指定了我们都使用的公司存储库。这些URL包含服务器名称和课程路径。每次我更改POM时,我都会发布一个新版本。将环境相关参数添加到版本

现在想象一下,托管我们的仓库的服务器将被重命名。我可以更改父POM中的所有URL(不是问题),并发布带有固定URL的新版本。但是我无法更改父POM的现有版本中的URL。

这意味着,我无法重建过去的任何神器。

有没有一些标准的方法来解决这个问题?像:

  • 中央属性文件
  • 的配置POM具有固定1.0.0快照版本,即得到再版上是否有变化?

回答

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/*/*/ 
+0

这不是最好的策略。 –

+0

该公司的DNS不合作:(。我在这里看到的唯一方法是将别名放入所有开发人员PC的lmhosts中。但这不是一个很好的解决方案,恕我直言。 –

+0

我认为我们不能触摸settings.xml –

2

从未除了distMngt在POM放仓库。再次 - 从来没有You have burned your POMs forever.这存在于Maven中,因为回购经理当时并不存在。多年来这是不好的做法,应该删除。

始终使用带回购组的Nexus实例。这将被添加到您的settings.xml,这将反映一切。

对于那些不相信,我是漫长的一年的Maven提交者。

+0

好吧,好吧,我相信你:)但是,这样如何:我为每个JBoss版本都有一个存储库。每个项目应该使用OLNY(对应于项目的JBoss版本)。另外,我希望避免每次新的jboss版本到达时更新所有开发人员的所有settings.xml。 –

+0

@BorisBrodski这是一个大脑死亡的方法。回购可以托管尽可能多的版本,只要你喜欢。即使您选择了我不建议的路线,也请告诉您的Nexus管理员代理这些回购并将这些代理添加到公共组中。你的开发者甚至不会注意到这一点。它会工作。充其量,您可以为Nexus中的这些回购库创建路线目标。 –

+0

使所有回购项目都可用,使得使用错误版本变得非常容易。我想确保项目使用的只有依赖关系,以后可以通过JBoss获得。如果使用了版本范围(比如,经常在p2版本中),那么添加新版本可能会破坏旧版本。任何想法?谢谢!! –

1

,我们采用在工作中的另一种方法是用参数来替换<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>标签。

+0

你用项目提交你的'settings.xml'? (否则,你可以检出一个旧标签并将其部署到新的URL。) –

+0

不,绝对不是。设置文件通常包含身份验证凭证,您不希望将其添加到您的VCS中。你提到的方法不是很好的做法。假设您签出一个旧标签并更改设置文件。如果您提交,则构建与标记不相同。如果你不承诺,那么你已经建立你不能重现。 Maven的原则之一是确保你有可重复的构建。 – Daniel

+0

好吧,现在我明白你的意思了。我想到的主要是这种方法。可悲的是,'settings.xml'结合了用户和项目首选项。我将尝试使用全局和用户的'settings.xml'文件来分离这些概念。我将为所有用户提供相同的全局'settings.xml'和URL(可能通过一些共享网络目录)。 –