GradleでJavaプロジェクトを新しく作ろうと思ったとき、「Gradle Java プロジェクト作成」でググると、どうにもEclipseを使ったり、 init --java-library
を使ったりと、必要最低限以上のものがくっついてくる方法ばかり出てくるので、Gradleの理解のためにもユーザーガイドを見ながら必要最小限のJavaプロジェクトの作り方を調べてみました。
たぶん仕事等でこの通りやることは少ないと思いますが、どこまでがGradleのお作法でどこからが便利部分なのかを理解するのにはちょうど良いかと思います。
ちなみに、この記事の内容はほぼユーザーガイドの Chapter 45. The Java Plugin の要約です。
前提
作成するのはコンソール上で動作する一番基本的なJavaアプリケーションです。
public static void main(String args[])
を含んだクラスから始まり、なんだかんだやってCUI上で完結するようなプログラムです。
クローラーによるデータ作成とか、DBのバッチ処理とか、そんな感じで使ったりする感じですね。
(JARで固めたライブラリを作りたい、という場合も手順は同じです。)
環境
- Gradle 3.0
- Mac OS X
- Java8
build.gradleの作成
適当なディレクトリ(新しく作成するプロジェクトのホームディレクトリ)に build.gradle
を作成します。
build.gradle はGradleでプロジェクトを管理しようと思ったら必須のビルドスクリプトファイルです。
$ vi build.gradle
apply plugin: 'java'
はい、これだけです。
これだけあればGradleはこのディレクトリ以下にあるファイルたちがJavaアプリケーションであることを認識してくれます。
ディレクトリの作成
Gradleは、プロジェクトがJavaアプリケーションであることを認識すると、ビルド時に所定のディレクトリをソースファイルやリソースファイルとしてクラスパスに追加します。
所定のディレクトリ、とは 45.4. Project layout に書いてある通りですので、この通りにディレクトリを作成します。
$ mkdir src{,/main{,/java,/resources},/test{,/java,/resources}}
$ tree
.
├── build.gradle
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
└── resources
※ sourceSet部分は、プロジェクトの事情によって追加する部分ですので省略しました。
main
にはプログラム本体を、 test
にはテストコードを置きます。
また、 resources
は入力データファイルや設定ファイルなどを置く場所です。
一旦ビルドしてみる
ここまで出来たら gradle build
で一旦ビルドできるか確認してみます。
$ gradle build
Starting a Gradle Daemon, 1 stopped Daemon could not be reused, use --status for details
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build
BUILD SUCCESSFUL
Total time: 6.158 secs
実際はgradleコマンドを実行する際のタスク(上記ではbuild)はかなり細分化されていて、細かい単位で指定することができますが、ひとまずはテストとコンパイル、JARの作成などの一連の作業をしてくれる build
を使っておくと良さそうです。
ビルドが成功すると、以下のように build ディレクトリが生成され、中にソースコードを固めたJARファイルが作成されました。(まだ1クラスも書いていないので中身は空ですが。。。)
$ tree
.
├── build
│ ├── libs
│ │ └── gradle_test.jar
│ └── tmp
│ └── jar
│ └── MANIFEST.MF
├── build.gradle
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
└── resources
11 directories, 3 files
まとめ
これで最小限のJavaプロジェクトが完成し、Javaプログラムを書き始める準備が整いました。
あとは、外部ライブラリが必要であれば build.gradle に dependencies
を書いたり、Eclipseで開発したければEclipseプラグインを追加したり、細かいビルドのロジックが必要であれば自分でタスクを書いたりしていくことになります。
実際にはプロダクトによって様々なディレクトリが必要になるかもしれませんが、基本形はここに紹介した通りになります。
おまけ:GradleWrapperを用意する
作成したプロジェクトをチームのメンバーと共有する場合は GradleWrapper を用意します。
GradleWrapperがあれば、チーム間で同じバージョンのGradleをインストールする等の環境構築が不要になります。
$ gradle wrapper
Starting a Gradle Daemon (subsequent builds will be faster)
:wrapper
BUILD SUCCESSFUL
Total time: 7.223 secs
$ ls -l
total 32
-rw-r--r-- 1 chooyan_eng wheel 355 9 6 01:26 build.gradle
drwxr-xr-x 3 chooyan_eng wheel 102 9 6 08:51 gradle
-rwxr-xr-x 1 chooyan_eng wheel 5242 9 6 08:51 gradlew
-rw-r--r-- 1 chooyan_eng wheel 2260 9 6 08:52 gradlew.bat
drwxr-xr-x 4 chooyan_eng wheel 136 9 6 01:36 src
gradlew
は実行ファイルになっていますので、Gradleがインストールされていない環境でも、 gradlew
コマンドによってgradleと全く同じことができる、というのが便利なポイントです。
The gradlew command can be used exactly the same way as the gradle command.
ぜひ作成してソース管理に追加しましょう。