Gradle build.gradle ビルドファイル
Gradle では build.gradle というファイルにビルド処理を記述する。
このページではビルドファイルの基本を説明する。
build.gradle の内容とプラグイン
Gradle で実行する compileJava や run などの処理は、ビルドファイルに記述された内容を基に実行される。
build.gradle の内容
生成された build.gradle は次のような内容である。
/*
* This build file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java project to get you started.
* For more details take a look at the Java Quickstart chapter in the Gradle
* user guide available at https://docs.gradle.org/4.1/userguide/tutorial_java_projects.html
*/
// Apply the java plugin to add support for Java
apply plugin: 'java'
// Apply the application plugin to add support for building an application
apply plugin: 'application'
// In this section you declare where to find the dependencies of your project
repositories {
// Use jcenter for resolving your dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}
dependencies {
// This dependency is found on compile classpath of this component and consumers.
compile 'com.google.guava:guava:22.0'
// Use JUnit test framework
testCompile 'junit:junit:4.12'
}
// Define the main class for the application
mainClassName = 'App'
build.gradle は Groovy で書かれている。
Groovy では Java と同じように // や /* */ でコメントを書ける。
コメントを取り除くと、それほど難しい処理は多くない。
Java プラグインの追加
apply plugin: 'java'
apply plugin: は Gradle プラグインを使用するための記述である。
java は Java プログラム向けの機能を提供するプラグインである。
先に使用した compileJava タスクもこのプラグインによって提供される。
Application プラグインの追加
apply plugin: 'application'
application はアプリケーションのビルドと実行に関する機能を提供するプラグインである。
先に使用した run タスクはこのプラグインによって提供される。
メインクラス名
mainClassName = 'App'
mainClassName は application プラグインで使用され、メインクラスを指定する。
run でアプリケーションを実行できるのは、このメインクラスが設定されているためである。
Java plugin
プロジェクトで Java plugin を使用するには、build.gradle に次のように設定する。
apply plugin: 'java'
基本プロジェクトレイアウト
| ディレクトリ | 説明 |
|---|---|
src/main/java |
Java ソースコードを管理するディレクトリ。 |
src/main/resources |
リソースを管理するディレクトリ。 |
src/test/java |
テスト用 Java ソースを管理するディレクトリ。 |
src/test/resources |
テストリソースを管理するディレクトリ。 |
src/sourceSet/java |
Java ソース用の特定 source set。 |
src/sourceSet/resources |
Java リソース用の特定 source set。 |
配布時にテストソースコードは含まれない。
リポジトリ
build.gradle には依存ライブラリに関する設定も記述されている。
Gradle にはプログラムに必要なライブラリを自動でダウンロードして統合する機能がある。
そのため重要になるのがリポジトリである。
リポジトリとは、各種プログラムライブラリが保存される場所である。 ビルドファイルには、どのリポジトリを使用するかを記述する。
repositories {
// repository settings
}
リポジトリ設定はこのブロック内に記述する。 Gradle では一般的に次のリポジトリサービスが使われる。
Maven Central
mavenCentral()
Apache Maven Central を使用するための設定である。 Gradle は Maven Central をそのまま利用できる。
JCenter
jcenter()
JCenter は Maven や Gradle などのビルドツールで使用されていた公開リポジトリである。
使用するには repositories に jcenter() を記述する。
mavenCentral() と jcenter() は Gradle のメソッドである。
repositories の中で呼び出すことで、指定したリポジトリを使用できる。
依存ライブラリ
リポジトリから必要なライブラリを使用するには dependencies ブロックを使う。
dependencies {
// library settings
}
生成されたファイルには 2 つの依存関係が記述されている。
コンパイル時の依存ライブラリ
compile 'com.google.guava:guava:22.0'
これはコンパイル時に使用するライブラリを指定している。
compile と書くことで、そのライブラリがコンパイル時に参照されることを示す。
テストコンパイル時の依存ライブラリ
testCompile 'junit:junit:4.12'
これは単体テストのプログラムをコンパイルするときに使用するライブラリを指定する。
testCompile と書くことで、そのライブラリがテストコンパイル時に参照されることを示す。
このほかにも、さまざまな処理で参照する依存ライブラリを指定できる。 覚えておきたいものの一つがクラスパスの指定である。
classpath '... library ...'
このようにすると指定したライブラリをクラスパスに追加できる。 コンパイルから実行時まで依存するライブラリの指定に使う。
ライブラリの指定
サンプルでは次の 2 つのライブラリを使用している。
'com.google.guava:guava:22.0'
'junit:junit:4.12'
この書き方はおおよそ次の形式である。
'group:name:version'
group はライブラリが属する企業や団体などを表す。
name はライブラリ名である。
例は次のようになる。
'com.google.guava:guava:22.0'
group: com.google.guava
name: guava
version: 22.0
'junit:junit:4.12'
group: junit
name: junit
version: 4.12
これにより、どのライブラリが使われているかが分かりやすくなる。
個別に指定する方法
1 つの文字列にライブラリ情報をまとめる書き方は簡単だが、読みにくく、間違えたときに原因を見つけにくい場合がある。 Gradle では group、name、version を分けて記述することもできる。
group:'group', name:'name', version:'version'
サンプルのライブラリは次のように書ける。
compile 'com.google.guava:guava:22.0'
// becomes
compile group:'com.google.guava', name:'guava', version:'22.0'
testCompile 'junit:junit:4.12'
// becomes
testCompile group:'junit', name:'junit', version:'4.12'
この書き方は各値が明確で分かりやすい。 1 つの文字列にまとめるよりも確認しやすい場合が多い。