2013-04-18 108 views
0

我在理解如何在我的Java項目中有效地使用動態修訂Ivy時遇到問題。常春藤:使用動態修訂

目前,我有以下佈局:

lib-a 
revision: 1.0.0 
status: release 
dependencies: none 

lib-b 
revision: 2.0.0 
status: release 
dependencies: lib-a, rev 1.0.0 

project-a 
revision: 3.0.0 
status: release 
dependencies: lib-b, rev 2.0.0 

project-b 
revision: 4.0.0 
status: release 
dependencies: lib-b, rev 2.0.0 

這意味着我總是狀態保持到release和使用明確的版本號。 如果我在開發過程中更改lib-a,比如lib-a,這是非常痛苦的。

我保存lib-a中的更改,將常見問題文件中的修訂更新爲1.0.1,稍作更改。然後,我需要更新lib-b的依賴關係來宣佈lib-a的修訂版本1.0.1。現在我可以更新lib-b以及project-a的版本,因爲project-a是可執行文件,並且包含我需要運行的集成測試。

第二種方法是重新發布lib-b與更新的依賴關係,但版本相同。這通常適用於命令行上的ant,但不適用於使用ivy-beans插件的NetBeans。他們仍然使用lib-b.的ivy文件的緩存版本。所以我需要清理本地緩存才能使其工作。

我在我們的SVN倉庫中爲所有項目使用了一個通用的build-ivy.xml ant腳本。每個項目的根目錄中都有build.xml,大部分時間只包含build-ivy.xml。有時需要添加或覆蓋任務。 我剛剛讀了herehere該解決方案可能使用動態修訂版。 據我瞭解,我會將所有常春藤文件的修訂版設置爲integration-latest,並將所有常春藤文件中的狀態設置爲integration。然後,常春藤總是會自動解析最新版本。 但是,我將我的模塊的修訂版設置爲?完全忽略它? 我將如何創建發佈版本?我是否需要更改所有常青藤文件並將其狀態設置爲release,或者如果可能,我是否會在發佈模塊之前執行傳遞任務,並將狀態覆蓋爲release

回答

1

我建議閱讀以下有關常春藤多模塊項目的教程。

ANT構建傳統的大而整體。您需要做的就是模仿Maven將大型項目分解爲一系列較小版本的方式。每個子版本都將它的神器出版到常春藤的本地回購中。

常春藤有很多有用的任務這種結構:

  • buildlist - 從你的整體主構建文件調用。使用瀏覽了每個子模塊的ivy.xml和確定合適的建造順序(有些模塊depende別人)
  • buildnumber - 什麼已經發布看起來併產生下一個版本號的順序
  • publish中 - 推將文物轉換爲本地回購(或外國文件,如果在ivysettings中配置的話)。xml文件)
+0

我們最近爲我們的項目實現了這一點。必要時基本上採取以下步驟: – jaw

+1

它通常起作用。在必要的情況下,基本上採取以下步驟:1.在''標籤內,徹底刪除'revision'屬性並將'status'屬性更改爲''integration''。 2.在依賴庫中,將''標籤內的'rev' attr更改爲'latest.integration'。 3.在ant構建文件中,對''任務,添加'resolveMode =「dynamic」'並添加一些版本魔法,如上面鏈接中所述。如果你改變'lib-a',pub-local,然後解決'project -a',它會找到更新後的'lib-a',這將在命令行中起作用。不幸的是,它不適合常春藤豆。 – jaw

+0

@ebeb您是否真的需要在解決任務中設置resolveMode屬性? –