Gradleを使う

投稿日:

この記事はhydrogen Advent Calender 2024の24日目の記事です。

Javaのビルドツール

Java及びJVM言語のビルドツールとしてよく使われるものにMavenやGradleがある。MavenはXMLで設定を書くのだが、ビルド時に追加で別の処理を行いたい場合にはわざわざプラグインを利用して読みづらい設定を書く必要がある。GradleはGroovyやKotlinで設定を書くことができ、プログラムを書くのと同じようにビルド設定を書くことができる。

そのため、昨今のJavaのプロジェクトにおいてGradleの利用は広がりつつある。

Gradleの導入

IntelliJにおいてはプロジェクトを作成する際にビルドツールとしてGradleを選択すれば導入できる。

それではつまらないのでIDEを使わずにGradleを導入する方法を紹介する。

  1. ここからGradleの最新バージョンをダウンロードする。
  2. 適当な場所で解凍する。
  3. PATHを通す(Windowsの場合は環境変数PATHにGradleのbinディレクトリを追加し、Linuxの場合は~/.bashrcなどにexport PATH=$PATH:/path/to/gradle/binを追加する)。
  4. gradle -vでバージョンが表示されれば導入完了。

なお、SDKMAN!やHomebrewを使えばここまでをコマンド一発で行うことができる。

sdk install gradle
brew 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'
}

一つづつ見ていこう。

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 build
gradlew build

gradlewはGradle Wrapperのことで、Gradleがインストールされていない環境でもビルドできるようにするためのものである。これにより、各環境のGradleのバージョンを気にすることなくビルドすることができる。

そして、ビルドが成功するとbuildディレクトリが作成され、その中にビルドされたファイルが格納され、libディレクトリ内にパッケージ化されたjarファイルが格納される。