2012-11-28 120 views
5

我有一個主Ivy項目,其他項目通過svn:externals屬性包含在他們的項目中。該項目包含Ivy jar,連接到我們項目的默認ivysettings.xml文件,以及一些Ant宏,它們允許我標準化構建jar等方式(例如,用戶使用<jar.macro><jar><jar.macro>使用相同的參數,但也自動將pom.xml嵌入到jar中,並將Jenkins構建信息添加到Manifest中)。常春藤:<ivy:settings> vs <ivy:configure>

我們也使用Jenkins作爲我們的持續集成系統。我想要做的一件事是清理每個構建的常青​​藤緩存,所以我們沒有任何由於緩存問題導致的jar問題。要做到這一點,我設置我ivysettings.xml文件來定義每個詹金斯執行人單獨的緩存:

<ivysettings> 
    <property name="env.EXECUTOR_NUMBER" value="0" override="false"/> 
    <caches 
     defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}" 
     resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/> 
    <settings defaultResolver="default"/> 
    <include file="${ivy.dir}/ivysettings-public.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/> 
</ivysettings> 

我原本使用的是<ivy:settings>任務來配置我們的常春藤項目。然而,Jenkins的所有執行者都使用了相同的Ivy緩存,這造成了問題。我從<ivy:settings>切換到<ivy:configure>,問題就消失了。顯然,<ivy:configure>立即設置常春藤(從而正確設置緩存),而<ivy:settings>不會設置常春藤,直到調用<ivy:resolve>

我在Nabble上看到過一些關於<ivy:configure>的郵件(或者可能不會)。我看不到任何常春藤在線文檔<ivy:configure>已被棄用。

那麼,您什麼時候可以使用<ivy:settings><ivy:configure>。在我的情況下,因爲我需要爲每個Jenkins執行器單獨使用緩存,所以我需要使用<ivy:configure>,但是有什麼原因可以使用<ivy:settings>而不是<ivy:configure>?而且,<ivy:configure>已棄用?

+0

優秀的問題。我從來沒有使用過「配置」任務。我懷疑這個設置任務更有用,因爲它可以讓你使用多個常青藤設置文件來執行多個常春藤解決任務。由於我很少調用一次常春藤決心,所以在我的例子中,看起來沒有任何真正的功能差異:-) –

+0

除了''和''可以帶一個_settings ID_,所以他們似乎都能夠使用多個設置和多個解析。它在''文檔中明確提到了這一點,但似乎這兩個任務都支持這個功能。我相信''是在Ivy 2.x中默認使用的,但在我的情況下,我的''引起了問題,但不是使用''。 –

+0

也許這個問題最好發佈到開發者郵件列表上。就像我說過的,我很少在構建中執行一次常春藤決心。這就解釋了爲什麼我從不需要指定設置ID。是的,這是一個難題 –

回答

4

這裏是我的發現:

  • <ivy:settings>是新的和首選方式。
  • <ivy:configure>可能會或可能不會被棄用。
  • <ivy:settings>不會設置我的常春藤設置,直到<ivy:resolve>被調用,而<ivy:configure>在任務執行後立即設置所有常春藤設置。

最後一個是我的問題。由於Jenkins的構建正在進行,我想用完全清理的緩存開始構建每個構建,我使用取決於Jenkins執行器編號的自定義緩存設置。高速緩存被標記爲cache-0cache-5

但是,由於<ivy:settings>在我撥打<ivy:resolve>之前未執行,因此我的自定義緩存設置未被拾取。在我致電Ivy解決方案之前,我致電<ivy:cleancache>,這會導致構建清除常見緩存。歡鬧隨之而來。使用<ivy:cofnfigure>修復了此問題。