Gradleを使う
この記事はhydrogen Advent Calender 2024の24日目の記事です。
Javaのビルドツール
Java及びJVM言語のビルドツールとしてよく使われるものにMavenやGradleがある。MavenはXMLで設定を書くのだが、ビルド時に追加で別の処理を行いたい場合にはわざわざプラグインを利用して読みづらい設定を書く必要がある。GradleはGroovyやKotlinで設定を書くことができ、プログラムを書くのと同じようにビルド設定を書くことができる。
そのため、昨今のJavaのプロジェクトにおいてGradleの利用は広がりつつある。
Gradleの導入
IntelliJにおいてはプロジェクトを作成する際にビルドツールとしてGradleを選択すれば導入できる。
それではつまらないのでIDEを使わずにGradleを導入する方法を紹介する。
- ここからGradleの最新バージョンをダウンロードする。
- 適当な場所で解凍する。
- PATHを通す(Windowsの場合は環境変数PATHにGradleのbinディレクトリを追加し、Linuxの場合は~/.bashrcなどにexport PATH=$PATH:/path/to/gradle/binを追加する)。
- gradle -vでバージョンが表示されれば導入完了。
なお、SDKMAN!やHomebrewを使えばここまでをコマンド一発で行うことができる。
sdk install gradlebrew install gradleこうしたらプロジェクトのあるディレクトリで次のコマンドを実行することでGradleプロジェクトを作成できる。
gradle wrapperこれでGradleの導入は完了である。
Gradleの設定
ビルド時の処理や依存関係の設定はbuild.gradleに書く。
plugins {
    id 'java'
}
group 'dev.hydrogen1'
version '1.0-SNAPSHOT'
repositories {
    mavenCentral()
}
dependencies {
    testImplementation platform('org.junit:junit-bom:5.10.0')
    testImplementation 'org.junit.jupiter:junit-jupiter'
}一つづつ見ていこう。
- pluginsブロック: プラグインを適用する。ここではJavaプラグインを適用している。
- groupと- version: プロジェクトのグループ名(ドメインなど)とバージョンを指定する。
- repositories: ライブラリを保管しているリポジトリを指定する。ここではMaven Centralのみを指定している。
- dependencies: 依存関係を指定する。後ほど説明する。
dependencies
dependenciesブロックには依存関係を指定する。GradleはMavenと同様に依存関係を解決してくれる。
指定方法で色々と挙動が変わるので説明していこう。
| 指定方法 | 挙動 | 
|---|---|
| compile | 依存関係を伝播させる(非推奨) | 
| implementation | 依存関係を伝播させない | 
| api | 依存関係を伝播させる(要Java Libraryプラグイン) | 
| compileOnly | コンパイル時のみ利用し、それ以降は除去する | 
| runtimeOnly | 実行時のみ利用し、それ以前は除去する | 
| annotationProcessor | アノテーションプロセッサを指定する | 
これのそれぞれにtestを冠したテスト時の設定を指定するものもある。
compileOnlyは特定のコンパイル時に消去されるようなアノテーションを使いたいという場面で使われる。そして、annotationProcessorはアノテーションプロセッサを指定するものである。よくLombokなどのアノテーションプロセッサを指定する。
プロジェクト名はどこにあるのか
ここまでを見てもらえれば分かる通り、build.gradleのどこを見てもプロジェクト名は含まれていない。これはどこで指定されているのかというと、同じディレクトリにあるはずであろうsettings.gradleに書かれている。
rootProject.name = 'SampleProject'これでプロジェクト名を指定することができる。
ビルドする
Gradleプロジェクトを作成したら、次のコマンドでビルドすることができる。
./gradlew buildgradlew buildgradlewはGradle Wrapperのことで、Gradleがインストールされていない環境でもビルドできるようにするためのものである。これにより、各環境のGradleのバージョンを気にすることなくビルドすることができる。
そして、ビルドが成功するとbuildディレクトリが作成され、その中にビルドされたファイルが格納され、libディレクトリ内にパッケージ化されたjarファイルが格納される。