GradleでJavaプロジェクトをビルドしてみる

メモ:

「[Javaの開発環境-ビルドツールGradle[(gradle.html)」でGradleが使える環境が整っているとします。

ここでは、Gradleを使ってJavaのプロジェクトをビルドしてみます。

ビルドの準備

Gradleでは、プラグインという形で様々な対象(環境)に対応できるようになっているようです。 ここでは、Javaのコンパイル、テスト、ビルドが行えるJavaプラグインを使用します。

Javaプラグインは、次のようなプロジェクトレイアウトを仮定しているので同じフォルダ構成でプロジェクトを作成していきます。

プロジェクト
     |- src
         |- main
         |    |- java(Javaソース)
         |    |- resources(リソース)
         |
         |- test
         |    |- java(テストのJavaソース)
         |    |- resources(テストのリソース)
         |
         |- sourceSet
         |    |- java(特定のソースセットのJavaソース)
         |    |- resources(特定のソースセットのリソース)

※ソースセットは、一緒にコンパイルされ実行されるソースファイルのグループだそうです。

上記フォルダは、存在してもしなくても見つけたものをコンパイルし見つからないものはそれなりに動作するようです。

ビルド用のスクリプトは、プロジェクトフォルダの配下に build.gradle (デフォルト)というファイルを作成し、このファイルにスクリプトを記述していきます。

Javaのプロジェクトをビルドするのに最低限必要な記述は、Javaプラグインの適用のみです。 build.gradle ファイルに次のように記述します。

apply plugin: 'java'

Gradleは、src/main/javaにソースコードがあるとして動作しますので、「JavaでHello, World!」で作成したHello.javaを配置しておきます。

プロジェクトのビルド

プロジェクトをビルドするには、プロジェクトフォルダをカレントとして次のコマンドを実行します。これは、buildタスクを実行するという意味になります。

c:\project> gradle build
:compileJava
:processResources UP-TO-DATE
:classes
: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: 3.766 secs

こんな感じで「BUILD SUCCESSFUL」と表示されれば成功です。

ビルドに成功するとプロジェクトフォルダ内に「.gradle」と「build」フォルダが作成されます。

すべての出力ファイルは、buildフォルダの下に作られ、最終的にbuild/libsフォルダにJARファイルが作られます。

タスクとは

Gradleには、プロジェクトとタスクという2つの基本的な概念があります。

Gradleによるビルドは、1つ以上のプロジェクトから構成されます。ビルドと聞くとアプリケーションをコンパイル/ビルドする機能に感じますが、GradleでビルドできるものはJARファイルを作成したり、Javadocを生成したり、アーカイブをリポジトリに公開したりすることもビルドと呼ぶようです。

例えば、Hello World!と出力するタスクを作成し、ビルドしてみます。build.gradleファイルに次のスクリプトを作成します。

task hello {
    doLast {
        println 'Hello World!'
    }
}

作成したbuild.gradleのフォルダに移動し次のコマンド(ビルド)を実行します。

c:\project> gradle hello
:hello
Hello World!

BUILD SUCCESSFUL

Total time: 4.469 secs

実行した結果、「Hello World!」と出力されます。Gradleは、コンパイル/ビルドするだけではない事が分かります。

※実行時に「-q」オプションを付けるとGradleが吐き出すメッセージを抑制してくれます。

c:\project> gradle hello
Hello World!

Javaプラグインで用意されたタスク

「タスクとは」では、build.gradleファイルにタスクを定義しましたが、Javaプラグインを使用したときは、何も定義しませんでした。

これは、Javaプラグインにbuildタスクが用意されているからです。build.gradleを作成したフォルダで次のコマンドを実行することで用意されているタスクを知ることができます。

c:\project> gradle tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend
on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
classes - Assembles classes 'main'.
clean - Deletes the build directory.
jar - Assembles a jar archive containing the main classes.
testClasses - Assembles classes 'test'.

Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]

Documentation tasks
-------------------
javadoc - Generates Javadoc API documentation for the main source code.

Help tasks
----------
components - Displays the components produced by root project 'project'. [incuba
ting]
dependencies - Displays all dependencies declared in root project 'project'.
dependencyInsight - Displays the insight into a specific dependency in root proj
ect 'project'.
help - Displays a help message.
projects - Displays the sub-projects of root project 'project'.
properties - Displays the properties of root project 'project'.
tasks - Displays the tasks runnable from root project 'project'.
・・・・・