次のように記述すると、module1のcompile
依存関係が module2 の依存関係として取得されtestCompile
ます。
dependencies {
testCompile project(':module1')
}
module2のbuild.gradle
ファイル内。ご自身のコメントで述べたように、module2 に適用されていない場合、module1 に適用された Android プラグインから依存関係を取得することはできません。
編集:別のスクリプトで依存関係を定義する方法について、次の説明を追加しました。
コメントで述べたように、代替手段は、すべてのサードパーティの依存関係を定義する別のスクリプトにプロパティを追加することです。私は、関与しているすべてのマルチ プロジェクト ビルドでこれを行う傾向があります。実際、私はdependencies.gradle
ファイルの存在に慣れているので、実際には単一プロジェクト ビルドでもこれを行います。
アイデアは非常に単純です。
- サードパーティの依存関係を定義するプロパティを持つ別のスクリプトを追加します
- このスクリプトをすべてのモジュールに適用します
- どこでも重複するハードコーディングの代わりにプロパティを使用する
そうすれば、すべての依存関係を 1 か所で定義でき、依存関係の定義の読みやすさが向上し、モジュールが互いに「非同期」になることはありません (たとえば、同じライブラリの異なるバージョンに依存する 2 つのモジュール)。追加のボーナスは、1 つのプロパティに属する複数の依存関係を組み合わせることができることです。
例:
質問で説明されているように、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があなたのためにそれを行いますが、正直なところわかりません-私はそれをテストしていません。
また、注意: ここでの例は、目的を達成する方法を示したものであり、決して完全ではありません。