javaのビルド周りに興味をもったので、その時のメモ。
Gradleとは
javaのビルドツールで jarファイル(javaのバイトコードファイルや画像をzipファイル形式で一つにまとめたもの)
へのビルドをしてくれます。
mavenと違い、設定ファイルはgrovyという言語で書きます。
また、gradleを毎回インストールすることがないように、gradle wrapper というものを作り、
これを配布することで、gradleをインストールしていない環境でもgradle を使うことが出来ます。
Gradle 初期化
簡単なgradleプロジェクトを作ります。
gradle init
これで色々ファイルが作られます。具体的には以下の感じ
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
依存性解決
gradleはjavaの外部のパッケージを管理して、自身ののプロジェクトでそのパッケージを使えるようにしてくれます。
dependencies {
implemention("パッケージ名")
}
タスク
gradleにおけるタスクとは,公式から引用すると、ビルドを行うための細かい作業とのことです。
組み込みのタスク
このタスクはgradleのプロジェクトが生成された時点でいくつか作られています。
例えば、テスト、ビルド、実行などです。
これらは、
gradle tasks
で一覧を見ることが出来ます。
タスクの定義
これは、自分で定義できるので、簡単なタスクを定義してみましょう。
task hello {
println("hello")
}
実行してみよう。
gradle hello
#以下のが表示されるはず
#hello
#:hello UP-TO-DATE
こんな感じでタスクを作って、内部でプラグインの設定や特定のタスクのみを束にしておくことが出来ます。
タスクをアクションで構成する
タスクは自分が実行スべきタスクをアクションという単位で認識していて、それを配列として順次実行していきます。
アクションは
doFirst:先頭に追加する
doLast: 末尾に追加する
といった形で追加していきます。
task hello{
hello.doFirst {
println "hello1"
println "hello2"
}
hello.doLast {
println "hello3"
println "hello4"
}
}
これを実行すると
gradle hello
結果は
:hello
hello1
hello2
hello3
hello4
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
となる。
こんな形で実行順序を制御して、処理順序をカスタマイズすることができます。
gradleのtips
これまででざっくりとgradleの使い方を触ってきましたが、今度は各々のタスクが早くなる設定や分析ための便利な機能を見ていきたいと思います。
並列化
graleは基本的にタスクを一つずつしか実行していきません。ですが、
並列実行を強制する設定があります。
なお、これは完全に独立しているタスクを並列実行するので、依存関係があるものに関してはこれまでどおり逐次実行されます。
gradle.propertiesに以下を追加します。
org.gradle.parallel=true
プロファイリング
gradleにはタスク実行時にどのくらい時間を使ったか、並列実行したかなどをプロファイリングして、視覚化してくれる機能があります。
これはタスクの実行時に --scan
をつければ、実行後にCLIにURLが表示され、そこから確認ができます。
ただ、これにはgradleでメールアドレスの登録などが必要なため、情報管理的な部分を考える必要があります。
このプロファイリングは結構便利で、テストの重い部分やサジェストなど、ビルドの効率化に重要な情報を得ることができます。
参考
最後に
gradleは設定ファイルが、独自言語だったりしますが、その言語にさえ慣れてしまえば設定は読みやすいし、
タスクの設定も細かく行える印象です。
また、ビルド時のプロファイリングなど、検証と改善の昨日も揃っているところもいいです。
それでは良いgradleライフを