きっかけ
なんとなく知っているけど、なんとなくで終わっていることに違和感を感じたから。
参考に、下記の本をベースに学習した。
![Javaビルドツール入門 Maven/Gradle/SBT/Bazel対応 Javaビルドツール入門 Maven/Gradle/SBT/Bazel対応](https://images-fe.ssl-images-amazon.com/images/I/51vqMQQOYEL._SL160_.jpg)
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
に出力される。