Gradleで「Hello World」をするのにJavaを使ったわけですが、そもそもユーザガイドの最初がJavaから入っているわけで、Gradleのスタンス的には
GradleはGroovyで書かれているけど、ビルドツールとしてはJava標準でGroovyもサポートしてるよ
くらいなのかもしれませんね。
では、ユーザガイドを参考にして、やってみましょう。
http://www.gradle.org/docs/current/userguide/tutorial_groovy_projects.html
Groovy用のプロジェクトを作る
まずは、ディレクトリ作成。
$ mkdir hello-gradle-groovy $ cd hello-gradle-groovy/ $ mkdir -p src/main/groovy
ソースファイルの配置先は、Groovyの場合「src/main/groovy」ですね。
build.gradleの中身は、こんな感じです。
apply plugin: 'groovy'
では、サンプルとなるGroovyソースを用意してみます。
src/main/groovy/HelloGradle.groovy
class HelloGradle { static void main(String[] args) { println("Hello World") println("Groovy Version = ${GroovySystem.version}") } }
では、ビルド。
$ gradle build :compileJava UP-TO-DATE :compileGroovy FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileGroovy'. > You must assign a Groovy library to the 'groovy' configuration. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 6.218 secs
おや、失敗しました。「Groovyの設定してないよ!」と言ってます。…そうなの?デフォルト設定で動くものじゃないんだ。
というわけで、ユーザガイドに従いGroovyの設定をしてみます。build.gradleを修正。
apply plugin: 'groovy' repositories { mavenCentral() } dependencies { groovy group: 'org.codehaus.groovy', name: 'groovy', version: '2.0.1' }
repositoriesとdependenciesを追加しました。repositoriesはMavenのCentralリポジトリしか書いてないので、要らないんじゃ?と思いましたが、サンプルがそう書いていることから予想できるように、書かないと失敗します…。
この辺、ホントにGroovyをビルドプロセスでネイティブサポートしてますというよりは、ただのライブラリとしてしか見てないんだな〜っていう姿勢がよくわかりますね。
では、ビルド〜。
$ gradle build :compileJava UP-TO-DATE :compileGroovy Download http://repo1.maven.org/maven2/org/codehaus/groovy/groovy/2.0.1/groovy-2.0.1.pom > Building > :compileGroovy > Resolving dependencies ':compile' > 15 KB/15 KB doDownload http://repo1.maven.org/maven2/antlr/antlr/2.7.7/antlr-2.7.7.pom > Building > :compileGroovy > Resolving dependencies ':compile' > 632 B/632 B doDownload http://repo1.maven.org/maven2/org/ow2/asm/asm-tree/4.0/asm-tree-4.0.pom > Building > :compileGroovy > Resolving dependencies ':compile' > 2 KB/2 KB downDownload http://repo1.maven.org/maven2/org/ow2/asm/asm-parent/4.0/asm-parent-4.0.pom > Building > :compileGroovy > Resolving dependencies ':compile' > 5 KB/5 KB downDownload http://repo1.maven.org/maven2/org/ow2/ow2/1.3/ow2-1.3.pom > Building > :compileGroovy > Resolving dependencies ':compile' > 9 KB/9 KB downDownload http://repo1.maven.org/maven2/org/ow2/asm/asm-commons/4.0/asm-commons-4.0.pom > Building > :compileGroovy > Resolving dependencies ':compile' > 2 KB/2 KB downDownload http://repo1.maven.org/maven2/org/ow2/asm/asm/4.0/asm-4.0.pom > Building > :compileGroovy > Resolving dependencies ':compile' > 1 KB/1 KB downDownload http://repo1.maven.org/maven2/org/ow2/asm/asm-util/4.0/asm-util-4.0.pom > Building > :compileGroovy > Resolving dependencies ':compile' > 1 KB/2 KB downDownload http://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/4.0/asm-analysis-4.0.pom > Building > :compileGroovy > Resolving dependencies ':compile' > 1 KB/2 KB downDownload http://repo1.maven.org/maven2/org/codehaus/groovy/groovy/2.0.1/groovy-2.0.1.jar Download http://repo1.maven.org/maven2/antlr/antlr/2.7.7/antlr-2.7.7.jar Download http://repo1.maven.org/maven2/org/ow2/asm/asm/4.0/asm-4.0.jar Download http://repo1.maven.org/maven2/org/ow2/asm/asm-tree/4.0/asm-tree-4.0.jar Download http://repo1.maven.org/maven2/org/ow2/asm/asm-commons/4.0/asm-commons-4.0.jar Download http://repo1.maven.org/maven2/org/ow2/asm/asm-util/4.0/asm-util-4.0.jar Download http://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/4.0/asm-analysis-4.0.jar :processResources UP-TO-DATE :classes :jar :assemble :compileTestJava UP-TO-DATE :compileTestGroovy UP-TO-DATE :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :test :check :build BUILD SUCCESSFUL Total time: 26.028 secs
…おかげで、なんか予定外に依存関係の管理を使うことになってしまいました。あと、Javaソースコードはないですけど、compileJava入ってますね。
ダウンロードしたファイルや各種キャッシュは、$HOME/.gradleに保存されるようですね。
$ ll ~/.gradle 合計 16 drwxrwxr-x 4 xxxxx xxxxx 4096 Aug 5 20:42 ./ drwxr-xr-x 62 xxxxx xxxxx 4096 Aug 5 20:36 ../ drwxrwxr-x 4 xxxxx xxxxx 4096 Aug 5 20:42 caches/ drwxrwxr-x 2 xxxxx xxxxx 4096 Aug 5 20:24 jna/
実行してみよう
前回のエントリから、Mainクラスの実行にはapplicationプラグインが必要なことはわかっているので、build.gradleを以下のように修正。
apply plugin: 'groovy' apply plugin: 'application' mainClassName = 'HelloGradle' repositories { mavenCentral() } dependencies { groovy group: 'org.codehaus.groovy', name: 'groovy', version: '2.0.1' }
実行。
$ gradle run :compileJava UP-TO-DATE :compileGroovy :processResources UP-TO-DATE :classes :run Hello World Groovy Version = 2.0.1 BUILD SUCCESSFUL Total time: 12.831 secs
動きました〜。
ちなみに、Groovyではスクリプトで書いた場合、ファイル名がクラス名になる…とうことを考えると、以下のコードでも動作します。
src/main/groovy/HelloGradle.groovy
println("Hello World") println("Groovy Version = ${GroovySystem.version}")
実行。
$ gradle run :compileJava UP-TO-DATE :compileGroovy :processResources UP-TO-DATE :classes :run Hello World Groovy Version = 2.0.1 BUILD SUCCESSFUL Total time: 12.232 secs
まあ、ここまで端折るくらいなら、普通にgroovyコマンドで実行すれば?という感じだとは思いますが。