我有我的身材,一個Android應用程序和Java庫兩個模塊。 (Side story,Java庫是針對Android應用中的類運行jvm測試,因爲它需要Gradle Java插件,並且與Gradle Android插件不兼容,所以我不得不拆分它們。)導入從一個搖籃模塊的所有依賴於另一個
在java模塊我想自動導入其他模塊的所有依賴關係,以避免讓它們保持同步。
如何配置一個模塊的compileTest
依賴項以匹配另一個模塊compile
依賴項?
(同時使用插件替代建議表示歡迎。)
我有我的身材,一個Android應用程序和Java庫兩個模塊。 (Side story,Java庫是針對Android應用中的類運行jvm測試,因爲它需要Gradle Java插件,並且與Gradle Android插件不兼容,所以我不得不拆分它們。)導入從一個搖籃模塊的所有依賴於另一個
在java模塊我想自動導入其他模塊的所有依賴關係,以避免讓它們保持同步。
如何配置一個模塊的compileTest
依賴項以匹配另一個模塊compile
依賴項?
(同時使用插件替代建議表示歡迎。)
你會得到Module 1的compile
依賴作爲模塊2 testCompile
依賴關係,如果你寫:
dependencies {
testCompile project(':module1')
}
在
build.gradle
文件模塊2的
。正如您在註釋中所陳述的那樣,如果module1中未應用android插件,則不會從module1中應用android插件。
編輯:增加了如何描述如何在單獨的腳本中定義依賴關係。
正如在評論中提到的,另一種是在一個單獨的腳本,定義了每個第三方依賴添加屬性。我傾向於這樣做的每一個多項目構建的是我參與。其實,因爲我習慣了一個dependencies.gradle
文件的存在,我真正做到這一點在單項目構建爲好。
的想法很簡單:
你在一個地方定義所有依賴這種方式,依賴定義的可讀性會增加,你的模塊將永遠彼此不同步(例如,「不同步」)。兩個模塊取決於同一個庫的不同版本)。另外一個好處是你可以將幾個屬於一個屬性的依賴關係組合在一起。
實施例:
說,我們有2個模塊中的問題進行說明。模塊1使用一些第三方庫。模塊2應該測試模塊1,並且需要模塊1中定義的每個庫以及它自己的一些模塊。
dependencies.gradle
ext {
JAVAX_MAIL = 'javax.mail:mail:1.4.5'
JODA_TIME = 'joda-time:joda-time:2.1'
LOG4J = 'log4j:log4j:1.2.16'
SPOCK = [
'org.spockframework:spock-core:0.7-groovy-2.0',
'org.objenesis:objenesis:1.2',
'cglib:cglib-nodep:2.2.2'
]
// Note: I don't usually combine dep's like this, it's just for illustration.
// I prefer to spell them out to make it more explicit.
MODULE_1_DEPS = [ JAVAX_MAIL, LOG4J ]
}
module1/build.gradle
apply from: "$rootDir/dependencies.gradle"
dependencies {
compile MODULE_1_DEPS
}
module2/build.gradle
apply from: "$rootDir/dependencies.gradle"
dependencies {
compile JODA_TIME, LOG4J
testCompile MODULE_1_DEPS, SPOCK
}
注意:如果您將「特性」合併到列表中,則可能會必須將列表弄平。即如:MY_DEP = [ DEP1, DEP2 ].flatten()
。 也許 gradle爲你做,我真的不知道 - 我沒有測試過它。
另外請注意:這裏的例子是關於如何實現你想要的只是說明,他們沒有以任何方式完成。
有趣的是,即使主模塊編譯與傳遞依賴關係很好,它仍然拉入所述的依賴關係,但不是可傳遞的依賴關係。 – Turnsole
令人驚訝 - 它也可能成爲一個問題。在多項目構建中,我傾向於創建一個依賴性定義爲屬性的'dependencies.gradle'文件。這樣,我可以獲得更多可讀的依賴關係定義,並將所有依賴關係定義在一個地方。這些屬性甚至可以包含多個依賴關係(如列表),所以你可以將所有想要的依賴關係合併爲一個,如果這樣做合理的話 - 我想它就是你的情況。如果您願意,我可以編輯我的答案以包含此示例。 – Steinar
我很感激,從維護的角度來看,這聽起來很不錯。 – Turnsole
不要你從模塊1的依賴關係,如果你只寫'依賴{testCompile項目(「:模塊1」)}'在模塊2的'build.gradle'文件? – Steinar
哦,這確實有用。我最初感到困惑,因爲當我嘗試時,它錯過了很多Android依賴項。但是,由於Android項目應用了Android插件,因此它看起來像這些依賴項沒有列爲依賴關係,因此我必須在第二個模塊中手動添加它。但列出的依賴關係確實被導入。如果您將此作爲答案添加,我會接受它。 – Turnsole