Gradle プロジェクト作成

Gradle を使用して Java プロジェクトを作成し、生成されたプロジェクトがどのように構成されているかを確認する。

Gradle プロジェクトの初期化

ここでは Gradle を使って開発用プロジェクトを初期化する手順を説明する。

プロジェクトを初期化する

Gradle で開発するには、まず Gradle が管理するプロジェクトを用意する。 基本的な手順は次のとおりである。

1. プロジェクトを作成する場所へ移動する

コマンドプロンプトまたはターミナルを開き、適切な場所へ移動する。 デスクトップに作成する場合は、次のように実行する。

$ cd Desktop

2. プロジェクトディレクトリを作成する

ここでは GradleApp という名前のディレクトリを作成する。

$ mkdir GradleApp

3. プロジェクトディレクトリへ移動する

次のように実行する。

$ cd GradleApp

4. プロジェクトを初期化する

ここが Gradle プロジェクトの土台を作成する実際の作業である。

$ gradle init --type java-application

gradle init は Gradle プロジェクトを初期化するコマンドである。 --type java-application は Java アプリケーションのプロジェクトタイプを指定する。

Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 10s
2 actionable tasks: 2 executed

しばらく待つと、必要なファイルやディレクトリが作成される。

Gradle プロジェクトの構成

生成されたプロジェクトの内容を確認する。 次のようなファイルとディレクトリが用意されている。

Gradle ディレクトリ

.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   └── java
    │       └── App.java
    └── test
        └── java
            └── AppTest.java

.gradle ディレクトリ

Gradle が使用するディレクトリである。 タスクによって生成されたファイルが保存される。 通常、この内容を直接編集することはほとんどない。

gradle ディレクトリ

Gradle が必要に応じて使用するディレクトリである。 基本的には Gradle 環境をまとめた wrapper ファイルが保存されている。

src ディレクトリ

プロジェクトで作成するプログラム関連のファイルを置くディレクトリである。 ソースコード、各種リソースファイルなどはこの中に配置する。

build.gradle

Gradle の基本ビルド設定ファイルである。 プロジェクトのビルド処理が記述されている。

gradlew, gradlew.bat

Gradle wrapper のコマンドである。 gradlew.bat は Windows 用、gradlew は macOS と Linux 用である。

settings.gradle

プロジェクトに関する設定情報を記述するファイルである。

最も重要なのは src ディレクトリである。 開発するプログラムで使用するファイルはここに保存される。 次に重要なのが build.gradle で、ビルド処理の内容を記述するビルドファイルである。 このファイルは Groovy で書かれている。

src ディレクトリ

開発の本体となる src ディレクトリを開く。 構成は次のようになっている。

src
├── main
│   └── java
│       └── App.java
└── test
    └── java
        └── AppTest.java

src ディレクトリには main と test の 2 つのディレクトリが含まれる。 それぞれの役割は次のとおりである。

main ディレクトリ

作成するプログラム本体のファイルをまとめるディレクトリである。 中には Java ソースコードを置くための java ディレクトリがあり、サンプルとして App.java が含まれている。

test ディレクトリ

単体テスト用のファイルをまとめるディレクトリである。 同じく java ディレクトリがあり、その中に AppTest.java のサンプルファイルがある。

main と test の下にはまず言語名のディレクトリがあり、その下にその言語で書かれたソースコードを配置する。 これが Gradle プロジェクトの基本的なフォルダ構成である。

src の内容は Maven と同じか

この構成を見て、どこかで見たことがあると感じる人もいるだろう。 実は src ディレクトリの構成は Apache Maven のプロジェクトと同じである。 Maven プロジェクトにも src があり、その中に main と test がある。

Maven は Java ビルドツールの標準的な存在になったため、Gradle も Maven のフォルダ構成を踏襲している。

gradle init コマンドと type の種類

gradle init コマンドは init タスクを実行する。 Gradle では実行する作業をタスクと呼び、gradle コマンドは指定したタスクを実行する。

init タスクはプロジェクトファイルやディレクトリを作成してフォルダを初期化する。 --type オプションにより、どの種類のプログラム用プロジェクトとして初期化するかを指定できる。 2017 年 10 月時点では次の種類が用意されていた。

java-application

Java アプリケーションプロジェクトを作成するタイプである。 基本的に App.java が用意される。

java-library

Java ライブラリプロジェクトを作成するタイプである。 サンプルのソースコードがアプリケーションのメインクラスではない点が主な違いである。 build.gradle も少し異なる。

groovy-application

Groovy アプリケーション開発用のプロジェクトである。 Groovy 開発の基本タイプと考えてよい。

groovy-library

Groovy ライブラリ開発用のプロジェクトである。 基本的には groovy-application と同じで、サンプルコードが異なる程度である。

scala-library

Java 仮想マシン上で動作する Scala 用の開発タイプである。 当時は Scala のアプリケーションタイプは用意されていなかった。

basic

基本タイプである。 すべてのタイプの土台になるもので、src は作成されない。 ビルドファイルにも具体的な処理は記述されず、build.gradle と settings.gradle だけが作成される。 --type を付けずに gradle init だけを実行すると、この basic タイプが指定される。

pom

Maven の pom.xml を基に build.gradle を作成する。

Java プログラマであれば、通常は java-application と java-library を知っていれば十分である。

コンパイルと実行

基本操作

ここでは作成したプロジェクトを Gradle コマンドで処理する。 コンパイル、実行、パッケージ化、クリーンといった基本操作を説明する。

プログラムをコンパイルする

$ gradle compileJava

コンパイルは compileJava タスクとして提供される。 これは Java ソースコードをコンパイルするためのタスクである。

プログラムを実行する

$ gradle run

java-application タイプのプロジェクトには run タスクが用意されており、これを実行するとメインクラスを起動できる。 デフォルトでは App.java が実行される。

プログラムをパッケージ化する

$ gradle jar

jar タスクはプログラムを Jar ファイルにまとめる。 生成されたファイルはプロジェクトの build ディレクトリ配下の libs に保存される。

プロジェクトをクリーンする

$ gradle clean

プロジェクトをビルドすると build ディレクトリにさまざまなファイルが保存される。 clean タスクはこれらのファイルを削除し、ビルド前の状態に戻す。

ビルドと実行

コマンドプロンプトまたはターミナルでプロジェクトディレクトリへ移動し、次のように実行する。

$ gradle compileJava
$ gradle run
$ gradle jar

コンパイル時には必要なライブラリがダウンロードされる。

Download https://jcenter.bintray.com/com/google/guava/guava/22.0/guava-22.0.pom
Download https://jcenter.bintray.com/com/google/guava/guava-parent/22.0/guava-parent-22.0.pom
... 省略 ...
Download https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar
Download https://jcenter.bintray.com/com/google/guava/guava/22.0/guava-22.0.jar

BUILD SUCCESSFUL in 13s
1 actionable task: 1 executed

プロジェクトを実行する。

$ gradle run

> Task :run
Hello world.


BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date

プロジェクトの Jar ファイルを作成する。

$ gradle jar

BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date

実行時には Hello World. というメッセージが表示される。 また、build ディレクトリの libs に GradleApp.jar が作成されていることを確認できる。

ただし、この Jar ファイルはマニフェストを含まないため、java -jar GradleApp.jar では実行できない。 java -classpath GradleApp.jar App のように classpath を明示して App クラスを実行すれば動作する。 少し手間はかかるが、生成されたプログラムが動くことは確認できる。