最近は専らmavenよりもgradleを使っている.近年はmake, ant,maven, sbtと比較的短期間で様々なビルドツールを使わざるを得なかったことに食傷気味ではあったが,gradleをいざ使ってみると,mavenやantの冗長なコンフィグからの脱却や拡張性の高さがすぐに気に入った.
以下はgradleでmavenのようなマルチモジュールのプロジェクトを定義した例.
以下の例では親プロジェクトが"tanu-im",子モジュールとして"desktop-ui"と"core"を想定している.
1. settings.gradleにはプロジェクトの定義を書く
rootProject.name = 'tanu-im'
include 'core'
include 'desktop-ui'
2. ルートプロジェクト直下のbuild.gradle. dependencyManagementを使いたいので,spring-gradleのdependency-managementプラグインを追加.
group 'org.tanuneko.im'
version '1.0-SNAPSHOT'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'io.spring.gradle:dependency-management-plugin:0.5.6.RELEASE'
}
}
3. common.gradleとdependencies.gradleの作成
共通の処理をcommon.gradle,プロジェクトの依存ライブラリをdependencies.gradleに定義.
common.gradle
// apply plugin here
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'
apply from: "${rootProject.projectDir}/gradle/dependencies.gradle"
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies.gradle
repositories {
mavenCentral()
}
project.ext {
// spring
springVersion = '4.2.6.RELEASE'
// JSON
jacksonVersion = '2.7.1'
// unit test
junitVersion = '4.11'
hamcrestVersion = '1.3'
// util
commonsLang3Version = '3.4'
commonsIOVersion = '2.4'
// logging
slf4jVersion = '1.7.21'
logbackVersion = '1.1.5'
}
dependencyManagement {
dependencies {
// spring
dependency "org.springframework:spring-core:${springVersion}"
dependency "org.springframework:spring-test:${springVersion}"
// JSON
dependency "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}"
dependency "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}"
// unit test
dependency "junit:junit:${junitVersion}"
dependency "org.hamcrest:hamcrest-all:${hamcrestVersion}"
// util
dependency "org.apache.commons:commons-lang3:${commonsLang3Version}"
dependency "commons-io:commons-io:${commonsIOVersion}"
// logging
dependency "ch.qos.logback:logback-classic:${logbackVersion}"
dependency "org.slf4j:slf4j-api:${slf4jVersion}"
}
}
dependencies {
compile 'org.slf4j:slf4j-api'
testCompile 'junit:junit'
testCompile 'ch.qos.logback:logback-classic'
}
4. 子モジュールの作成.ルートプロジェクト直下に"core", "desktop-ui"のディレクトリを作ったのち,mavenスタンダードアーキタイプの構成を作る(e.g. src/[main|test]/[java|resources].
5. build.gradleを子モジュールのルートに作成.ここには子モジュール独自の依存関係や処理を定義.