2013-02-15 42 views
2

正如標題所示,這主要是我們用於Java項目的依賴項解析的Ivy。我們只是設立了常春藤,所以我可能不知道所有的事情。常春藤:將所有依賴項安裝到共享存儲庫

這是我的問題:比方說,我有一個模塊A,依賴於B,C,D,E和whatnot。我知道我可以輕鬆地將模塊A發佈到我的共享庫。這樣可行。我想要的是,Ivy將模塊A依賴的所有模塊從公共存儲庫複製到共享存儲庫。我檢查了ivy:install任務,這不完全是我想要的(或者我可能誤解它是如何工作的)。該example說:

<ivy:install organisation="apache" module="commons-lang" revision="2.0" from="ivyrep" to="myfsresolver"/> 

fromto屬性是強制性的,從例子,我想它爲一個依賴是已知庫內部,並具有特定修訂。我將不得不寫一個ANT任務,明確地分別安裝每個依賴項。

我需要什麼,就是告訴常春藤 - 執行解決 - 發佈/安裝用自己的名字都發現依賴關係,從他們的源代碼庫修訂版本,其中已發現到我的共享資源庫

所以to屬性可能有意義,可能是conf屬性,但不是name,revisionfrom

所以,我正在尋找一個任務一樣

<ivy:install to="shared"/> 

,將暫時安裝所有的依賴關係(即使不依賴模塊本身)到我的共享資源庫,我們甚至可以建立沒有連接到互聯網或當公共存儲庫關閉。

+0

什麼是您需要解決的底層_problem_?一個maven代理可能就足夠了。 – 2013-03-02 23:15:46

+0

目前,我們正在從主要由NetBeans/IDE驅動的開發過渡到可自動化的ANT/ivy驅動方法,從而實現持續集成。我們需要解決的問題或者我們試圖實現的問題是獨立於公共存儲庫和我們的互聯網連接。從長遠來看,圖書館和整個知識庫可能無法使用。因此,儘快發佈版本可用,所有依賴項必須從我們的內部共享倉庫中可用。 – jaw 2013-03-11 09:08:07

+1

我發現像這樣的事情很容易得到,如果你去完全maven,但你會得到很多其他的限制。你爲什麼選擇螞蟻+常春藤? – 2013-03-11 09:45:36

回答

3

這不是最好的解決方案,但可能的工作是使用2個存儲庫。

使用第一個存儲庫發佈模塊A,然後使用ivy將A及其所有依賴項複製到第二個存儲庫。爲此,您可以使用install任務。在from屬性中,您將指定chain resolver指向第一個存儲庫和公共存儲庫,並在to屬性中指定您的共享存儲庫。

我在這樣的設置中沒有使用Ivy,但我們成功地使用install將包括所有傳遞依賴項的工件從公共存儲庫複製到我們自己的存儲庫,因此我不明白爲什麼這不應該起作用。

+0

這是一種醜陋的黑客,但它確實有效!我已經有一個Ant任務'發佈 - local'是做'<常青藤:決心/> \t \t <常青藤:發佈狀態= 「釋放」 解析器= 「本地」 覆蓋= 「真」> \t \t \t <文物模式=「$ {dist.dir}/[artifact] - [revision]( - [classifier])。[ext]」/> \t \t'。然後,我添加了一個新任務'install',將= '這取決於'publish-local'和'init',它設置一些環境變量並調用'' – jaw 2013-02-18 17:31:16

2

這是基於Philipp的回答和我無法讀懂的評論。我只是想舉一些例子。我總是有一個共同的build-ivy.xml,我在每個項目build.xml包括。這個通用構建腳本包含以下任務,這些任務是安裝包含依賴項到您的共享存儲庫的模塊所需的。

這將讀取ivy.xml來填充變量。

<target name="init"> 
    <ivy:settings file="${env.IVY_SETTINGS}/ivysettings.xml"/> 
    <ivy:info/> 
</target> 

下一個任務取決於您需要執行的各種清理,編譯,包等任務。

<target depends="init,clean-build,clean-dist,dist,package-doc,package-sources" name="publish-local"> 
    <ivy:resolve/> 
    <ivy:publish status="release" resolver="local" overwrite="true" > 
     <artifacts pattern="${dist.dir}/[artifact]-[revision](-[classifier]).[ext]"/> 
    </ivy:publish> 
</target> 

此任務現在將安裝包含依賴關係的當前模塊,並將其過渡到共享庫中。

<target name="install" depends="publish-local"> 
    <ivy:install module="${ivy.module}" from="local" to="shared" organisation="${ivy.organisation}" revision="${ivy.revision}" overwrite="true" transitive="true"/> 
</target> 
相關問題