2012-02-08 116 views
2

我們有三個神器:Maven的WAR覆蓋問題,同時使用哈德森+ Artifactory的

common.jar : with common classes. 
public.war : depending on the common.jar, contains only public site resources. 
internal.war : depends on both common.jar and public.war, adding authentication 
       information and security context resource files. Also contains 
       few administration site classes. 

目前我已經在這樣的方式構建這些,那internal.war overlays本身public.war。

在本地構建項目,將工件安裝到本地回購,完美地工作。

  1. 構建所有項目的依賴順序:試圖讓哈德森建立工作與依照以下順序

    問題開始。

  2. 修改common.jar(例如,添加一個新的類方法)
  3. 修改internal.war類,使得它們在編譯時依賴於步驟2中完成的更改。
  4. 提交這兩個更改,觸發Hudson構建。因爲它無法找到在步驟2中

不知怎的,構建步驟5中添加的符號是使用舊版本的common.jar的,因爲它沒有

  • Internal.war構建失敗。

    common.jar版本號不會改變,假設它是1.0.0-SNAPSHOT用於本示例。

    如果我改變了common.jar的版本號,這個版本就可以工作。 (據推測,因爲發佈版本號只有一個版本)。

    現在,什麼可能會導致這種使用哈德遜舊工件的構建?

    我們正在運行的Maven建立在哈德森命令「清包-e -X -U」

    「部署文物,Maven倉庫」已被選中。

  • +0

    只是爲了確定,你的意思是詹金斯還是哈德森? – noamt 2012-02-08 13:38:21

    回答

    2

    很難明確回答這個問題得不到真正的勁歌,但這裏是我會做什麼:

    1)確保你是在本地機器

    哈德森是使用Maven的版本完全相同

    2)通過mvn help:effective-pom在終端的Hudson機器上檢查internal.war的有效pom.xml,確保您運行的是與Hudson作業相同的mvn可執行文件。您需要在internal.war的有效pom.xml中驗證common.jar的版本。由於配置文件或settings.xml的差異,它可能與您所期望的不同。

    3)檢查您的Hudson安裝的Maven settings.xml文件。特別是您需要驗證分發管理,服務器和存儲庫節中的所有內容。檢查這個的另一個好方法是去你的internal.war項目並運行mvn help:effective-settings,看看那裏有什麼與你本地機器上的內容相匹配。

    有些東西是錯誤的,它不會花費很長時間才能找到正確的分析。