2016-02-23 96 views
2

是否可以從我的主根項目中引用(包含)另一個gradle root項目及其子項目?Gradle多重項目,多根項目和依賴關係

例子:我現在有2個gradle這個Android的多項目是這樣的:

rootA 
     |--- android_lib_A1 
     |--- android_lib_A2 
     |--- androidapp_A 

    rootB 
     |--- android_lib_B1 
     |--- android_lib_B2 
     |--- androidapp_B 

我怎樣才能正確的gradle包括項目android_lib_B1rootAandroidapp_A使用它呢?

我目前所面臨的問題如下:

  • rootB gradle這個版本是不讀的時候納入rootA,更 具體allprojects{}subprojects{}指令
  • rootB gradle這個設置是無法讀到失敗構建當 android_lib_B1取決於android_lib_B2例如,但這似乎是正常的行爲根據我已閱讀。

我可以通過將android_lib_B1發佈到我的本地maven存儲庫中來工作,但我希望能夠將它們一起編譯,而無需額外的發佈任務。

我看過那個gradle的ProjectDescriptorparentchildren屬性,這是要走的路嗎?

回答

2

您可以在您的項目rootA/settings.gradle

include ':android_lib_A1',':android_lib_A2',':androidapp_A' ':android_lib_B1' 
project(':android_lib_B1').projectDir = new File("/path-to-project/rootB/android_lib_B1") 

2)使用

1項目)鏈接的外部模塊添加在build.gradleandroidapp_A模塊

dependencies { 
    compile project(':android_lib_B1') 
} 

注重依賴。
通過這種方式,您將能夠讀取android_lib_B1中的build.gradle,但不能讀取rootB中的腳本。這意味着如果您在rootB中定義了一些任務或功能,則必須添加到rootA或android_lib_B1/build.gradle文件中。
當然,由於您使用的是rootA項目,所以rootB/settings.gradle將不會被讀取。

部分解決方案可能是使用通用文件夾,您可以在其中放置您的gradle文件。 可以使用鏈接這些文件:

apply from: 'gradleFolderScript/myFile.gradle' 
+0

感謝您的回答。我已經試過了,正如你所說我的'rootB'任務沒有被讀取。我來自Maven,並使用'rootB'將我的庫中的常見任務分解爲父'pom.xml'。真的沒有其他辦法可以將知識產權推向每個圖書館嗎?或者將'rootB'複製/粘貼到'rootA'? – IppX

+0

@IppX我不知道。通常我使用一個單獨的gradle文件(而不是頂層),它將它與'apply from:'gradleFolderScript/myFile.gradle''聯繫起來。通過這種方式,你可以使用一個公共的文件夾重用相同的gradle文件。 –

+0

我會試試這個,這似乎是一個很好的折衷。謝謝 ! – IppX

0

另一種選擇是保持獨立的項目併發布文物的公共儲存庫(如artifactory)。請參閱publishing artifacts

+0

感謝您的回答!這確實有效,但正如我所說,如果可能的話,我希望避免這種額外的發佈任務。 – IppX

+0

啊,那麼@ GabrieleMariotti對多模塊構建和'項目(...)'依賴關係的建議是解決方案 –

相關問題