2011-11-13 114 views
1

我想修改我的構建過程使用Ant與我的個人項目的Apache常春藤建設。它們由幾個共享模塊和一些依賴共享模塊的應用程序模塊組成。對於這個帖子的緣故,讓我們簡化和說我有一個共享的模塊(common),並取決於common應用模塊(application)。每個模塊都有它自己的有效SVN倉庫:如何使用常春藤/螞蟻使用中間文物

svn_repo_1/common/trunk 
       /branches 
       /tags 
svn_repo_2/application/trunk 
         /branches 
         /tags 

我檢查了相關修訂成一個公共工作區,在平面結構:

workspace/common 
workspace/application 

一般來說,application將取決於一個發佈版本common,所以建設application時不需要搭建common

然而,當我需要新的功能添加到commonapplication需要,我會然後像application爲依賴於我的工作區的最新common版本(無需發佈常見到我的倉庫)。

我認爲這是latest.integration的含義(即更改application的ivy.xml以指定通用修訂版的latest.integration)。我的意圖是使用常春藤buildlist任務來查找在構建應用程序之前需要構建的本地模塊。但這不起作用,因爲buildlist任務似乎包括common/build.xml條目,無論應用程序的ivy.xml文件是否指定latest.integration或某個其他發佈的修訂。

我將不勝感激任何建議。我正在努力處理常春藤的文檔和樣本,所以任何現實世界的例子也會有所幫助。注意:我對這裏的Maven解決方案不感興趣。

回答

1

哇,這真是似曾相識!從3到4個月前回到本網站的一些第一個問題,他們幾乎都與常春藤有關!我百分之百地認爲常春藤是一種難以學習和馴服的野獸,但現在在專業使用幾個月後,我再也無法發展它。所以我的第一條建議是:繼續前進。遲早,您在Apache Ivy上找到的一些(實用的)文檔都將開始變得有意義並開始發揮作用。

我能理解有可能是你爲什麼不想發佈common到您的回購情有可原的原因。但是,如果你是一個新來的要依賴管理,實際的諮詢意見的第一件,我可以給你的是,你應該始終發佈您的JAR/WAR的/不管你的回購;而不是您的工作空間本地的中介「集成」。

這樣做的原因很簡單:常春藤只抓取你在你的設置文件(基本)定義庫的能力。如果您故意在這些定義的存儲庫之外保留一個類似common的JAR,那麼:(a)Ivy無法解決傳遞依賴關係(其主要工作),以及(b)「下游」(依賴)JAR無法動態地每當你調整common時更新。因此,使用Ivy僅對而不是發佈JAR是有點反作用的;我很驚訝常春藤甚至將其作爲一項功能。

我想我會需要了解你的動機不發佈common。如果您在執行ivy:publish任務時遇到問題,請不用擔心,我可以提供大量示例幫助您入門。但是如果還有其他一些原因,那麼我請你考慮這個解決方案:設置多個存儲庫。或許你有一個「主」存儲庫,其中大部分內容都被髮布;然後你有一個「二級」或「中介」資料庫,你可以在任何時候發佈common來做到這一點。然後,您可以使用兩種不同的發佈任務來配置Ant構建,例如publish-mainpublish-integration

通過這種方式,您可以獲得兩全其美的效果:您可以獲得中間轉場區域,並且可以將所有內容都保存在常春藤的強大控制中。

+0

感謝您的回覆。我之所以不想在構建中間構建時發佈'common'是因爲我將ivysvn用於我的主存儲庫 - 因此已發佈的構件會簽入到單獨的svn存儲庫中。我不想要一個通用的latest.integration.jar繼續承諾。我喜歡你多個存儲庫建議的聲音。我是否可以使用這兩個存儲庫來解決問題,以便我的主ivysvn存儲庫中的第三方工件從那裏解析,而我的common-latest.integration.jar是從本地目錄存儲庫中解析出來的? – zorgbargle