2011-12-20 124 views
6

我正在考慮將我管理的Maven項目切換到Apache-Ant/Ivy。我需要更多的控制構建過程,並且對Maven感到非常沮喪。請不要評論Maven是多麼偉大。我的問題是關於常春藤。項目建設的螞蟻/常春藤

我想設置一個「標準」的Ant構建模板,稍後可以用於其他項目,只需要很少的更改。

我將成立一箇中央「企業」的儲存庫,我們可以把不屬於公共Maven倉庫(如商業庫,太陽庫,專利庫等)可用的第三方庫。該企業存儲庫將在我們的本地局域網上提供,但可能不在辦公室之外。

每個開發人員將在~/.ivy/repository有一個私人存儲庫。我希望Ant構建自動更新此私有存儲庫,並使用企業存儲庫中已更改的庫版本。

~/.ivy/ant中,我計劃使用Ant 1.8中的include任務在單個項目build.xml中包含「標準」模塊。這些模塊將提供之類的東西ScalaClojure不同版本不同Scala和Clojure的版本(如:scala-compile-2.9.1.xmlclojure-compile-1.3.xml等)編譯目標的構建模塊將在企業倉庫中,並應在專用倉庫,如果自動更新他們改變。

每個項目都將遵循一個標準的Maven目錄結構:${project}/src/main/java${project}/target/classes

在過去,我用常春藤但Ant構建文件,試圖得到了非常大(> 500線爲模板構建文件)並難以管理/編輯。我希望通過將標準目標放在~/.ivy/ant目錄中的自己的構建模塊中,我可以避免代碼膨脹。

可以這樣做嗎?我離開基地嗎?我可以在常春藤找到的唯一文檔是在Apache網站(http://ant.apache.org/ivy)。有沒有其他文件可用,包括書籍?

+0

我不認爲,你需要庫的私人存儲庫。 常春藤在〜/ .ivy2中管理自己的[cache](https://ant.apache.org/ivy/history/latest-milestone/concept.html#cache),它會在解決依賴關係時保持最新狀態。 – oers 2011-12-20 14:26:13

回答

2

將模板構建文件劃分爲可包含的幫助程序文件相當明智。就個人而言,現在我正在切換一個來自ant的非常大的項目(根本不需要依賴管理 - 只需從ftp複製文件)到ant/ivy解決方案。所以我這樣做 - 我有一個里程碑目標文件 - 即準備編譯,編譯,準備歸檔,歸檔 - 等等。我想你明白了。我已經配置了所有這些目標的依賴關係(螞蟻方面的依賴關係,請不要誤會我)。以這種方式 - 編譯依賴於準備編譯,準備編譯依賴於初始化 - 像這樣。這些目標沒有正文 - 它們用於包含多模塊項目中每個模塊的每個構建文件。這個目標的唯一目的是維護構建狀態,因爲這些導入的東西變得相當棘手,很難知道什麼目標被覆蓋,以及何時運行這個目標。但是通過這個文件,我可以輕鬆地在每個明智的里程碑上改變vy的狀態。我想在一個模塊中使用exteran exe編譯幫助文件。沒問題 - 在這個項目中,我只是這樣做 - 準備歸檔取決於編譯幫助的目標。由於這個里程碑目標包括在內 - 我可以只覆蓋其中的一些目標 - 所有其他目標都會預設所需的建設項目方式。

我的策略的另一部分 - mixins構建文件 - 針對每個特定區域。所以我有一個常春藤檔案。我在那裏進行初始化,解決,發佈等等。當我想使用常春藤 - 我只是包括這個文件,並通過我的里程碑目標管理depdendencies。如果構建是典型的 - 我只包含這個文件並且具有約定優先配置功能。所有開箱即用。怎麼樣??只要結合其他mixin。 Mixins可能包含其他mixin以依賴它們。所以每個mixin都是我構建策略的可重用部分。 OOP的內容 - 單一關注單元。在你的情況下,它是scala mixin與特定於scala東西的目標。

然後我有委託子項目常見生成活動的委託。我有dist,all,測試和任何你想要的multimodule項目。構建順序使用ant-ivy任務buildlist進行評估。

還有一些其他的文件 - 但這是戰略上的基本文件,幫助我有一個可重用和可維護的構建與這個大和非常保守的項目。所以,如果你對細節感興趣,不要害羞,並且聯繫我。我將非常樂意爲您提供幫助,因爲常青藤文檔真的很複雜並且不完整。

編輯:關於書籍 - 螞蟻在行動可能會幫助你,我從這本書中得到了一些想法,我真的強烈建議它讓大家閱讀。你也可以找到常春藤的東西。關於常春藤文檔 - 對不起,這是所有可用的。但是當我遇到這個麻煩的常春藤+螞蟻的麻煩時 - 我在私人博客上發現了幾篇有趣的文章。所以...可能會以某種方式彌補差距。