gradlewコマンドが使えるようになったので、実際にJavaアプリの簡単なビルドをしてみましょう。
Gradleはプラグインによって機能拡張ができるようになっています。Gradleをインストールしたディレクトリの「lib/plugins」ディレクトリには、最初からいろいろなプラグインが同梱されています。その中の一つに、Javaアプリケーションのビルドをしたいときに使うための「Javaプラグイン」があります。
GradleがサポートするJavaプロジェクトの基本的なディレクトリ構造は次の通りです。カスタマイズもできるようですが、ここではデフォルトの設定のものを用意します。
.
├── build.gradle:ビルドファイル
├── build/:ビルドの結果生成されるファイルの出力先
│ └── libs/:JARファイルの出力先
└── src/
├── main/
│ ├── java/:ソースコード
│ └── resources/:JARに同梱されるリソース
└── test/
├── java/:テスト用ソースコード
└── resources/:このディレクトリのファイルはテスト実行時に使われる
Gradleは、製品のソースコードが「src/main/java」に、テストのソースコードが「src/test/java」にあることを想定しています。
さらに、「src/main/resources」の下にあるファイルは全てリソースとしてJARに入れられ、また「src/test/resources」にあるファイルはテスト実行時に使われるクラスパスに入れられます。
全ての出力ファイルは「build」ディレクトリの下に作られ、最終的に「build/libs」ディレクトリにJARファイルが作られます。
Gradleのディレクトリ生成機能は実験的なもののようですが、gradleコマンドの「init」タスクを使うと手軽に用意できます。
ここでは、gradleコマンドのラッパーであるgradlewコマンドを使うので、「projgw01」を「projjava01」へコピーして、そこへ必要なディレクトリを追加します。build.gradleは生成されるものを使うので、wrapperタスクが記述されているbuild.gradleは「build-misc.gradle」へ移動しておきます。
$ cp -r projgw01 projjava01 $ cd projjava01 $ mv build.gradle build-misc.gradle $ ./gradlew init --type java-library
生成されるbuild.gradleファイルの内容は次の通りです。コメントは省略してあります。
apply plugin: 'java' repositories { mavenCentral() } dependencies { compile 'org.slf4j:slf4j-api:1.7.5' testCompile 'junit:junit:4.11' }
「apply plugin: 'java'」でGradleのJavaプラグインを使うことを宣言しています。「repositories」ではApache Mavenのリポジトリを利用することを宣言しています。「dependencies」でコンパイル時に依存するライブラリとしてロギング用の「slf4j」、テストコンパイル時に依存するライブラリとしてテスト用の「junit」が指定されています。指定用の文字列は「GroupId:ArtifactId:Version」です。
「Maven Repository: Search/Browse/Explore」を開くとMavenのリポジトリに登録されているライブラリを調べることができます。ここで、「slf4j-api」を検索してみると、slf4j-apiのライブラリが見つかります。
そこで、例えば1.7.6のバージョンのページ「http://mvnrepository.com/artifact/org.slf4j/slf4j-api/1.7.6」を開くと、Apache Mavenでの指定方法が表示されて、「GroupId」「ArtifactId」「Version」をXML表記で確認できます。
[Gradle]のタブを表示すると、Gradleで使う文字列が分かります。
build.gradleでGradleのJavaプラグインを使うことを宣言しましたから、タスクにはJavaプラグインが提供するものが追加されています。「gradlew tasks」コマンドでタスク一覧を確認してみましょう。プロジェクトのビルドをする「build」タスク、buildディレクトリを削除する「clean」タスク、メインクラスを含むJARファイルを生成する「jar」タスクといったものがあることが分かります。
$ ./gradlew tasks (略) 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'. (略)
生成された「Library.java」「LibraryTest.java」といったファイルは削除して、「App.java」「AppTest.java」を用意します。単にHello Gradleとコンソール画面へ出力するアプリですが、テストができるようにAppクラスでは、「getMessage()」というクラスメソッドを用意してあります。
public class App { public static String getMessage() { return "Hello Gradle"; } public static void main(String[] args) { System.out.println(App.getMessage()); } }
import org.junit.Test; import static org.junit.Assert.*; public class AppTest { @Test public void testSomeLibraryMethod() { assertEquals("Hello Gradle", App.getMessage()); } }
これらを用意したら、gradlewのbuildタスクを実行してみましょう。記述ミスがなければテストが通って「SUCCESSFUL」となります。
$ ./gradlew build :compileJava UP-TO-DATE (略) BUILD SUCCESSFUL Total time: 5.117 secs
ちなみに、テストの結果は、「projjava01/build/reports/tests/index.html」に出力されています。Webブラウザーで確認してみるといいでしょう。アプリケーションを実行するには、build.gradleファイルがあるディレクトリをカレントとして、次のようにします。
$ java -cp build/libs/projjava01.jar App Hello Gradle
Copyright © ITmedia, Inc. All Rights Reserved.