2015-06-20 110 views
4

背景故事:能夠解決模塊依賴動態基於版本

在Eclipse中,當你有POM文件(並因此版本)打開了多個項目,如果版本匹配的話,會自動使用本地引用您列出的依賴關係。如果它們不匹配,則它依賴於回購中的工件。 (這很方便,因爲它允許您在活動版本上進行實時編輯/鏈接,同時對不穩定的項目/依賴項版本具有固定的依賴關係)。



問題

在gradle這個,似乎沒有成爲一個方式說

我靠這個子模塊,X版本

相反,看來你ar Ë只能說

我靠這個子模塊上,我不在乎哪一個版本,我會好好當前的/活動之一。


那麼,有沒有更好的語法常規:

compile project(':submodules:submodule1') 

也許類似?:

compile project(':submodules:submodule1:0.1-SNAPSHOT') 

compile project('com.mydomain:submodule1:0.1-SNAPSHOT') 
+0

你如何在模塊中進行版本控制?一個模塊本質上只是一個磁盤上的一個目錄,其中包含一個構建文件。你將如何組織版本? –

+0

那麼,當一個模塊構建時,如果該模塊啓用了maven,那麼構建服務器會將該構件推送到本地nexus存儲庫。那樣,那個模塊的版本就可以在那裏使用。同樣,使用給定模塊在本地運行「安裝」也會生成本地引用的工件。 – CasualT

+0

所以通常情況下,你會推動你的項目,並且它會碰到構建服務器,構建服務器會在項目中遞歸地構建和構建所有構件,並將相應的版本推送到存儲庫。 – CasualT

回答

2

也許你做如果您需要依賴特定版本,則不想使用項目引用。項目參考文件基本上說明了你在問題中提到的內容。更確切地說,它不是「我不在乎哪個版本」,而是像「我依賴於這個子項目 - 在版本/狀態中它剛纔」。這就是項目引用的內容 - 聲明對另一個項目的依賴關係,而不是特定的JAR /版本。

如果您需要依賴於一個特定的版本,您應該聲明它沒有項目的依賴,比如:

compile('com.mygroupid:submodule1:0.1-SNAPSHOT') 

這是

compile(group:'com.mygroupid', name:'submodule1', version:'0.1-SNAPSHOT') 

縮短版在默認情況下,該將使用來自回購的神器。但是有一個解決方案可以讓你更接近你想要的東西。 eclipse-integration-gradle插件可以檢測到這種依賴關係,將它們替換爲具有Eclipse項目依賴關係的。該選項被稱爲「重新映射罐到Gradle項目」。因此,如果Eclipse工作空間中有一個目標項目,其名稱與目標模塊相對應,則此類Eclipse項目將被用於,而不是的回購JAR。

我不確定在同一工作區中是否可以使用同一項目的多個版本(如果這是您需要的)。

+0

那麼,在Android項目中使用gradle的全部觀點正在偏離日食,所以第二部分很好理解,但最終沒有用。就分離到完全不同的項目而言......我認爲它,但很可能只是使用屬性或風格來最終控制構建,以在從項目構建的現有構件或使用本地引用之間進行切換 – CasualT

+0

那麼究竟需要什麼設置?是否需要幾個版本的您的項目在包含源的獨立工作空間目錄中?然後允許交叉鏈接,以便版本V2的子模塊SMA(表示爲gradle子項目「:prj:SMA」)依賴於另一個子模塊SMB(「:prj:SMB」)那麼a)如果存在聲明版本爲V1的項目「prj」的工作空間目錄,則使用該源目錄,b)如果沒有這樣的工作空間目錄,則使用已經構建的JAR在某個遠程存儲庫中。這是你想要的嗎? – Marwin

+0

是的,大致。你之前使用過eclipse + maven集成嗎?基本上是如何工作。它根據需要自動關聯。 – CasualT