gradleを使った

お仕事でAntイケてないよねーって事でGradleを使うことになりました。

Gradle

http://www.gradle.org/

いまは1.12が出ているようです。2.0の話もちらほら聞きますがまだかな?

Documentも充実してますし、有志によるDocumentの日本語訳もあります。

以下作業メモ。やりたい事はDocumentにだいたい乗ってるので見る価値なし。

WindowsでGradle環境を作る

GradleはJavaさえ動けば動きます。WindowsとかLinuxとか関係ありません。
Gradle本体はzipで配布されてます。
https://services.gradle.org/distributions/gradle-1.12-bin.zip

解凍して適当に配備しておきます。
今回はWindowsに導入するので適当にC:\直下に解凍して、"C:\gradle-1.12"におきます。
この場所は後で使うので覚えておきます。

次に"C:\gradle-1.12\gradle-start.bat"というファイルを作ります。
中身は環境変数を設定してコマンドプロンプト(cmd.exe)を出すだけのバッチです。

@echo off

:: JAVA_HOMEは環境によって異なります
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0

set GRADLE_HOME=C:\gradle-1.12

set PATH=%PATH%;%JAVA_HOME%\bin;%GRADLE_HOME%\bin

start cmd

これでgradleを使う準備ができました。
このバッチをクリックして実行すると、コマンドプロンプトが出てきます。しばらくお付き合いする画面になります。

ためしに導入したgradleのバージョンを表示します。

gradle -v

こんな感じにバージョン情報が出てきたら導入はOKです。

                                                                                                                      • -
Gradle 1.12
                                                                                                                      • -
Build time: 2014-04-29 09:24:31 UTC Build number: none Revision: a831fa866d46cbee94e61a09af15f9dd95987421 Groovy: 1.8.6 Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013 Ivy: 2.2.0 JVM: 1.8.0-ea (Oracle Corporation 25.0-b30) OS: Windows 7 6.1 amd64
  • "'gradle' is not recognized as an internal or external command, operable program or batch file."とか出てバージョン情報が表示されない
    • 環境変数の設定ができていないかもしれません。GRADLE_HOMEを確認してください。

Javaプロジェクトを作る

GradleでJavaプロジェクトを作ります。
"C:\"の下に"workspace"フォルダを作って、さらにその下に"MyJavaProject"を作って作業することにします。

cd C:\
mkdir workspace
cd workspace
mkdir MyJavaProject
cd MyJavaProject

次にgradleのinitタスクを使って初期化します。
Documentは http://gradle.monochromeroad.com/docs/userguide/userguide_single.html#build_init_plugin あたりです。

    • typeでいくつか指定できます。

Javaプロジェクトにしたいので、java-libraryを指定します。

gradle init --type java-library
:wrapper
:init

BUILD SUCCESSFUL

Total time: 3.357 secs

すると、"BUILD SUCCESSFUL"という文字が出ます。これはコマンドがうまくいった事を意味します。


java-libraryを指定するといろんなファイルができます。

C:\workspace\MyJavaProject>dir
 Volume in drive C has no label.
 Volume Serial Number is 5C46-EFA0

 Directory of C:\workspace\MyJavaProject

2014/05/14  01:31              .
2014/05/14  01:31              ..
2014/05/14  01:31              .gradle
2014/05/14  01:31             1,222 build.gradle
2014/05/14  01:31              gradle
2014/05/14  01:31             5,080 gradlew
2014/05/14  01:31             2,404 gradlew.bat
2014/05/14  01:31               643 settings.gradle
2014/05/14  01:31              src
               4 File(s)          9,349 bytes
  • srcフォルダ
  • build.gradle
    • ビルドファイル。gradleの肝となるファイルです。何かするたびにこのファイルをいじる事になります。
  • gradleフォルダ
    • gradlewコマンドで使うものが入っています。
  • gradlew/gradlew.bat
    • gradleコマンドの変わりにgradlewコマンドを使えます。これはGradleを入れていないユーザでもgradlewを使うことで自動的にGradleを使える環境を整えてくれて、Gradleを扱う事が出来るようになります。プロジェクトのメンバーにはこれを使えばビルドできる事を教えるだけで良くなります。
  • settings.gradle
    • プロジェクト固有のgradleの環境設定を記述する時に使います。例えばProxyの設定などです。

--type java-libraryを指定すると、サンプルコード(src/main/java配下)が出来上がります。
試しに実行しましょう。せっかくgradlewがあるのでこれを使います。

このプロジェクトはどのようなタスクを実行できるか確認します。
(初回はgradle本体のダウンロードが発生するため、時間がかかります。)

gradlew tasks

サンプルコードに対するテストコード(src/test/java配下)も入っているので、ためしにテストを実行します。

gradlew check

Junitなどのライブラリを自動的にダウンロードして、テストを実行してくれます。
プロジェクトに依存するライブラリの定義はbuild.gradleに記述してあります。

テストも問題なかったので、Jarファイルを作ってみましょう

gradlew jar

jarタスクで作られたjarファイルはbuild\libsの下にあります。中身を確認してみます。

jar -tvf build\libs\MyJavaProject.jar
     0 Wed May 14 01:45:26 JST 2014 META-INF/
    25 Wed May 14 01:45:26 JST 2014 META-INF/MANIFEST.MF
   330 Wed May 14 01:43:06 JST 2014 Library.class

Library.classはサンプルコードにあったJavaファイルです。Jarを作る事ができました。

あとはsrc/*/javaの下にガツガツパッケージを作ってガツガツコードを書きます。

おしまい

簡単に触れました。

後はbuild.gradleをいじり倒すわけですが、build.gradleの記述は「設定より規約(CoC)」といった感じに、暗黙的に処理される部分が多いです。

このおかげで記述量が減って見通しの良いビルドスクリプトがかけるのですが、ちょっと凝った事をやろうとすると、どのタスクのどの部分がどのタイミングで実行されるのかなど、意識しなければならない時が着ます。

でも個人的にはAntのXMLではなく、groovyのスクリプトっぽくに記述できるだけでも大きいです。(groovyよくわかってないけど。)