kaakaa Blog

この世は極楽 空にはとんぼ

マルチプロジェクトビルドのサンプル

Gradle マルチプロジェクトビルドのサンプルの備忘。

第56章 マルチプロジェクトのビルド

下記のようなプロジェクト構造の時、Appプロジェクトをビルドする。
AppプロジェクトはStabプロジェクトにプロジェクト依存している。

├── App
└── build
    ├── build.gradle 
    ├── dep_project
    │   └── Stab
    └── settings.gradle
マルチプロジェクトの設定

BuildScript/settings.gradle にビルド対象のプロジェクトを記述する。

settings.gradle

includeFlat 'App'
include 'dep_project/Stab'

includeFlat はsettings.gradleが存在するディレクトリと同階層のプロジェクトを指定する。
includeはsettings.gradleが存在するディレクトリ配下のプロジェクトを指定する。

ビルドの設定

BuildScript/build.gradle にビルドの設定を記述する。

build.gradle

subprojects {
    apply plugin: 'java'

    repositories {
        mavenCentral()
    }

    dependencies {
        compile 'org.slf4j:slf4j-api:1.7.5'
        testCompile 'junit:junit:4.11'
    }
}

project(':App') {
    dependencies {
        compile project(':dep_project/Stab')
    }
}

subprojects に囲まれた部分の設定は、settings.gradleで指定された全てのプロジェクトに適用される。
プロジェクト固有の設定は project(':${プロジェクト名}') に記述する。

(この時、subprojectsの依存関係にStabプロジェクトを記述してしまい、ビルド実行時に「StabプロジェクトをビルドするためにStabプロジェクトをビルドしなければならない」という循環参照エラーで怒られるという失態を犯しました…)

プロジェクト依存の設定は下記の用に設定する。

dependencies {
    compile project(':dep_project/Stab')
}
ビルドの実行

build.gradleを普通に実行すると、settings.gradleに記述されたプロジェクト全てのビルドが実行されます。
(ビルドの順番ってどう決まるんだろ?)

gradle -b BuildScript/build.gradle build

ルートディレクトリから実行する場合、-b オプションでgradleスクリプトファイルを指定します。

特定のプロジェクトに対するビルドを実行したい場合は下記のようにします。

gradle -b BuldScript/build.gradle :App:build
:dep_project/Stab:compileJava UP-TO-DATE
:dep_project/Stab:processResources UP-TO-DATE
:dep_project/Stab:classes UP-TO-DATE
:dep_project/Stab:jar UP-TO-DATE
:App:compileJava UP-TO-DATE
:App:processResources UP-TO-DATE
:App:classes UP-TO-DATE
:App:jar UP-TO-DATE
:App:assemble UP-TO-DATE
:App:compileTestJava UP-TO-DATE
:App:processTestResources UP-TO-DATE
:App:testClasses UP-TO-DATE
:App:test UP-TO-DATE
:App:check UP-TO-DATE
:App:build UP-TO-DATE

BUILD SUCCESSFUL

Total time: 6.736 secs

依存しているStabプロジェクトに対するjarタスクも一緒に実行されています。


とりあえず今日はここまで。
GradleでSVNリポジトリから依存プロジェクトをチェックアウトしてからビルド実行が出来るようにすることが目標。
Gradle svn-ant Sample



Gradleはとても便利で高機能なのに日本語の書籍がないのがもったいないですね。
Gradle in Actionの邦訳とか出ないかな。

Gradle in Action

Gradle in Action