2015-10-13 38 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(可能通過一些共享網絡目錄)。 –