マルチプロジェクトビルドにおいて、別のサブプロジェクトが生成するクラスへの依存があることを示したい場合は、dependencies ブロックで依存先のプロジェクトを指定します。 例えば、下記のように、2 つのサブプロジェクト (myapp, mylib) で構成されているとします。
root/
+-- build.gradle
+-- settings.gradle
+-- myapp/
| +-- src/main/java/Main.java
+-- mylib/
+-- src/main/java/MyLib.java
include 'myapp'
include 'mylib'
プロジェクト myapp は、プロジェクト mylib が提供するクラスを参照して実装されています。
public class Main {
public static void main(String... args) {
System.out.println(MyLib.add(100, 200));
}
}
public class MyLib {
public static int add(int a, int b) {
return a + b;
}
}
このように Java のビルドにプロジェクト間の依存関係がある場合は、dependencies ブロック内の compile コンフィギュレーションに対して、依存先のプロジェクトを指定します。
project(':myapp') {
apply plugin: 'java'
dependencies {
compile project(':mylib')
}
}
project(':mylib') {
apply plugin: 'java'
}
これで、自動的に myapp プロジェクトから mylib プロジェクトへのクラスパスが設定され、ビルドが通るようになります。
$ gradle -q build
ちなみに、上記のようにすべてのサブプロジェクト内で同じコンフィギュレーションを行う部分がある場合は、subprojects メソッドに、共通処理のクロージャとして渡しておくことができます(ルートプロジェクトを含む共通処理を記述したい場合は、subprojects の代わりに allprojects を使用します)。
subprojects {
apply plugin: 'java'
}
project(':myapp') {
dependencies {
compile project(':mylib')
}
}
project(':mylib') {
}