GradleでSpringBootプロジェクトを始める


環境

Windows10 64bit
JDK 11

Spring Initializrからひな形をダウンロード

まずは、下記のページからSpringプロジェクトのひな形をダウンロードする。
画像のように、Mavenではなく、Gradleにチェックを入れておく。

ダウンロードして、展開したディレクトリは下記のようになっている。


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2020/04/29     23:48                gradle
d-----        2020/04/29     23:48                src
-a----        2020/04/29     23:48            341 .gitignore
-a----        2020/04/29     23:48            509 build.gradle
-a----        2020/04/29     23:48           5764 gradlew
-a----        2020/04/29     23:48           3056 gradlew.bat
-a----        2020/04/29     23:48            469 HELP.md
-a----        2020/04/29     23:48             26 settings.gradle

Gradle関係のディレクトリ・ファイル

プロジェクト内には、下記のようなGradle関連のファイル・ディレクトリが含まれている。

  • .gradle ... Gradleが生成するキャッシュが保存されているディレクトリ
  • gradle ... Gradleラッパーの設定ファイル / Jarファイルが配置されているディレクトリ
  • build.gradle ... ビルドスクリプト、大体これを触ることになる
  • gradlew ... Gradleラッパーのシェルスクリプト
  • gradlew.bat ... Gradleラッパーのバッチファイル
  • settings.gradle ... マルチプロジェクト時のビルドに必要な設定ファイル

Gradleラッパー

Spring Initializrを使う場合は、すでにプロジェクトにGradle Wrapperが含まれている。
なので、開発者がGradleそのものを手動でインストールする必要はない。
DLしたプロジェクトをIntellijなどのIDEで開くと、自動で所定のバージョンのGradleがインストールされる。
こうした配布の仕方をすることで、チームで使用されるGradleのバージョンを統一することができる。

IntelliJへの統合

IntelliJのGradleプラグインはデフォルトでインストールされているので、IDEのプラグインの追加は不要。
画面右側にGradleタブがあり、Gradle周りの操作はIntelliJ内で完結させることができる。
下のようにタスク一覧が表示されており、象さんマークのボタンから各タスクを実行することができる。

ビルドスクリプト

build.gradle

plugins {
  id 'org.springframework.boot' version '2.2.6.RELEASE'
  id 'io.spring.dependency-management' version '1.0.9.RELEASE'
  id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
  mavenCentral()
}
dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-web'
  testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
  }
}
test {
  useJUnitPlatform()
}

プラグイン


plugins {
    id 'org.springframework.boot' version '2.2.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

build.gradleを見ると、上記のようにプラグインが最初から導入されている。
Gradleのプラグインとは、開発でよく使われるタスクを予め定義してくれている拡張のこと。
例えば、javaプラグインであれば、ビルド、テスト、Javadocの生成などのタスクを予め用意してくれる。
下記のページで様々なプラグインが公開されているが、もちろんプラグインを自作することも可能。

リポジトリ

repositories {
  mavenCentral()
}

Gradleはライブラリの依存関係を外部・内部のリポジトリから取得する。
上記では、mavenCentralを指定しているので、依存関係を追加した場合はここから取得することになる。
他にもjCentergoogleのリポジトリなどもあるので、そちらを指定することもできる。
リポジトリ間の優先順位を決めておいて、Aにない場合はBから取得という指定の仕方もできる。
Nexus等を利用し自前で建てたプライベートリポジトリを指定することも可能。

依存関係

デフォルトでは下記のようになっている。


dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-web'
  testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
  }
}

implementationはアプリケーションのソースをコンパイルする時に必要な依存関係。
testImplementationはテストソースをコンパイルし、テスト実行するのに必要な依存関係。
他にも様々なコンフィグレーションの依存関係を設定することができる。
build.gradleに依存関係を追加すると、IntelliJが変更を検出し、リポジトリから依存関係を取得する。

テスト

test {
  useJUnitPlatform()
}

最初は上記のようになっており、テストを実行すると全てのテストが走る状態。
useJUnitPlatformブロック内で、JUnitの機能を使用し、テストの細かな制御を行うことができる。
例えば、特定のタグが付けられたテストメソッドをincludeしたり、excludeしたりできる。