きっかけ
なんとなく知っているけど、なんとなくで終わっていることに違和感を感じたから。
参考に、下記の本をベースに学習した。

Javaビルドツール入門 Maven/Gradle/SBT/Bazel対応
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2017/02/08
- メディア: 単行本
- この商品を含むブログを見る
Gradle特徴
Gradleとは、Groovyを使ったビルドツール。
- 柔軟な言語による記述
Groovyで処理を記述するため、処理を分割したり構造化したりすることが簡単。 - タスクによる処理の構築
タスク単位でビルドスクリプトを作る。 - 基本はJava/Groovy/Scala
JavaやJVM言語以外にもC/C++のビルドにも使える。 - 各種のツールとの併用
Antを利用したり、Mavenのpom.xmlをGradel用に変換したりするツールがある。 - Mavenのセントラルリポジトリに対応 セントラルリポジトリを利用できる。
試した環境
OS情報
Microsoft Windows [Version 10.0.15063]
Groovy情報
Groovy Version: 2.4.12 JVM: 9 Vendor: Oracle Corporation OS: Windows 10
Gradle情報
------------------------------------------------------------ Gradle 4.3 ------------------------------------------------------------ Build time: 2017-10-30 15:43:29 UTC Revision: c684c202534c4138b51033b52d871939b8d38d72 Groovy: 2.4.12 Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015 JVM: 9 (Oracle Corporation 9+181) OS: Windows 10 10.0 amd64
Java情報
java version "9.0.1" Java(TM) SE Runtime Environment (build 9.0.1+11) Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
2017/11/05時点では、Groovy/Gradleのコマンド打つとWarninng出るけど、気にせず実行。
試し実装
プロジェクト初期化
gradle init --type java-library
プロジェクト構成
| .gradleフォルダ | タスクで生成されたファイルが配置される |
| gradleフォルダ | Gradle環境をまとめたラッパークラスが格納されている。 |
| srcフォルダ | ソースコード関連の配置フォルダ |
| build.gradle | Gradleのビルドファイル |
| gradlew/gradlew.bat | Gradleコマンド |
| settings.gradle | 設定情報を記述したファイル |
srcフォルダの構成は、Mavenと同じ。
なお、、gradle initの際に、--type java-libraryのオプションを付けると、指定した言語のサンプルコードが生成される。
build.gradleは、ビルド内容を記述したファイル。
settings.gradleは、ビルドの設定情報が記述されている。
build.gradleの基本
ビルドが基本だが、プログラムチックな動きもできる。
例えば、下記の記述をbuild.gradleに追加してgradle heloと実行した場合、pringlnで指定した内容が出力される。
task helo {
doLast {
println();
println("====================================");
println("Welcome to Gradle!");
println("====================================");
println();
}
}
タスクは、doFirst/doLastで構成されている。
実行順序は、doFirst -> doLast
パラメータの利用
まずは、実験用のコードとして、下記をbuild.gradleに追加する。
task helo {
doLast {
def total = 0;
for (def i in 1..num.toInteger()) {
total += i;
}
println("total: " + total);
}
}
やっているのは、1からnumまでの合計を出力している。
引数は、Javaと同じくStringで渡される。
ここでの引数は、numが引き渡される想定。
実行には、下記のようなコマンドを実行する。
gradle helo -q -Pnum=100
引数の渡し方は、-Pプロパティ名=値という形式になる。
動的タスクの生成
形式
task "$変数名" { /** 処理 **/ }
例
def arr = ["one", "two", "three", "four", "five"];
arr.each { s ->
task "$s" {
doLast{
println("this is $s task.")
}
}
}
gradle -q oneで実行すると、this is one task.が表示される。
動的にタスクを作れるので、共通化をしやすくなる。
javaのビルドには、Javaのプラグインを使う。
apply plugin: 'java'をguild.gradleを追加し、gradle javaと実行すれば、buildフォルダが作成され、その中のclassフォルダの中にコンパイルしたソース群が出力される。
テストを実行したい場合は、gradle testで実行可能。
結果のレポートは、build\reports\tests\test\index.htmlに出力される。