Posted at

GradleでEclipseプロジェクトを使ってみたメモ

More than 5 years have passed since last update.


環境


  • Mac OS/X 10.9

  • Java 1.7.0_09

  • Eclipse Kepler Build id: 20130614-0229


インストールするもの


導入手順


ダウンロード/インストール


  1. オフィシャル(http://www.gradle.org/)から, gradle-1.8-all.zipをダウンロード



  2. 取得したバイナリを解凍し、任意の場所において gradle/binにパスを通す


    確認



# gradle -v 

------------------------------------------------------------
Gradle 1.8
------------------------------------------------------------

Build time: 2013-09-24 07:32:33 UTC
Build number: none
Revision: 7970ec3503b4f5767ee1c1c69f8b4186c4763e3d

Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.9.2 compiled on July 8 2013
Ivy: 2.2.0
JVM: 1.7.0_09 (Oracle Corporation 23.5-b02)
OS: Mac OS X 10.9 x86_64


eclipseプロジェクトを生成する


  • ディレクトリ構成
    maven的な構成ではない状況を想定。

# ll

total 8
drwxr-xr-x 3 ntakeda staff 102 10 27 14:19 testResources //テスト時に読み込むリソースファイルを配置
drwxr-xr-x 3 ntakeda staff 102 10 27 14:19 resources //実行時に読み込むリソースファイルを配置
drwxr-xr-x 3 ntakeda staff 102 10 27 14:33 src // Javaソース配置
drwxr-xr-x 3 ntakeda staff 102 10 27 15:11 test // テスト用Javaファイル配置
-rw-r--r-- 1 ntakeda staff 1070 10 27 15:12 build.gradle


build.gradle

// eclipse-wtpとの連携タスク用のプラグインをロード// eclipseプラグインはeclipse-wtpに内包されているapply plugin: 'eclipse-wtp'

// ソースファイルの読み込みディレクトリの定義sourceSets { main { java { srcDir 'src' } resources { srcDir 'resources' } } test { java { srcDir 'test' } resources { srcDir 'testResources' } }}

// srcDir: 'src' って記述は gradle 2.0で消える deprecatedな構文との警告メッセージが出た

// maven公開リポジトリを取り扱えるようにするrepositories { mavenCentral()}
// Java pluginの依存性定義dependencies { compile ( ['commons-io:commons-io:2.1'], ['commons-lang:commons-lang:2.6'], ) testCompile 'junit:junit:4.+'}


# gradle eclipse

:eclipseClasspath
:eclipseJdt
:eclipseProject
:eclipseWtp UP-TO-DATE
:eclipse

BUILD SUCCESSFUL

Total time: 16.092 secs


生成されるeclipse用ファイルのパスはローカルに依存

# less .classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="output" path="bin"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="resources"/>
<classpathentry kind="src" path="testResources"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" exported="true"/>
<classpathentry sourcepath="/Users/ntakeda/.gradle/caches/artifacts-26/filestore/commons-io/commons-io/2.1/source/46773a62217d7f630dfe6bae0bc645bbd92ffd09/commons-io-2.1-sources.jar" kind="lib" path="/Users/ntakeda/.gradle/caches/artifacts-26/filestore/commons-io/commons-io/2.1/jar/fd51f906669f49a4ffd06650666c3b8147a6106e/commons-io-2.1.jar" exported="true"/>
<classpathentry sourcepath="/Users/ntakeda/.gradle/caches/artifacts-26/filestore/commons-lang/commons-lang/2.6/source/67313d715fbf0ea4fd0bdb69217fb77f807a8ce5/commons-lang-2.6-sources.jar" kind="lib" path="/Users/ntakeda/.gradle/caches/artifacts-26/filestore/commons-lang/commons-lang/2.6/jar/ce1edb914c94ebc388f086c6827e8bdeec71ac2/commons-lang-2.6.jar" exported="true"/>
<classpathentry sourcepath="/Users/ntakeda/.gradle/caches/artifacts-26/filestore/junit/junit/4.11/source/28e0ad201304e4a4abf999ca0570b7cffc352c3c/junit-4.11-sources.jar" kind="lib" path="/Users/ntakeda/.gradle/caches/artifacts-26/filestore/junit/junit/4.11/jar/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar" exported="true"/>
<classpathentry sourcepath="/Users/ntakeda/.gradle/caches/artifacts-26/filestore/org.hamcrest/hamcrest-core/1.3/source/1dc37250fbc78e23a65a67fbbaf71d2e9cbc3c0b/hamcrest-core-1.3-sources.jar" kind="lib" path="/Users/ntakeda/.gradle/caches/artifacts-26/filestore/org.hamcrest/hamcrest-core/1.3/jar/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar" exported="true"/>
</classpath>

生成物は実行したローカルの環境にガッツリ依存する形になる。

ここは開発者ごとに生成することになるかな。


ビルド

gradle buildで色々やってくれる。詳細は http://gradle.monochromeroad.com/docs/userguide/tutorial_java_projects.html#N106C6


ビルド

gradle build

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build


ちなみに、jUnitが失敗した場合はこんな感じでエラーが出る。

※ 日本語のテストメソッドの出力周りがバグってるのは、環境の問題か?

突き詰めてない。

# gradle build                               

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:test

org.nt67.FileNumberReaderTest > 失敗するテスFAILEDッド
java.lang.AssertionError at FileNumberReaderTest.java:17

11 tests completed, 1 failed
:test FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///Users/ntakeda/tmp/gradle/build/reports/tests/index.html

* 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: 20.636 secs

実行ログに出力されているとおり、カッコイイレポートが出力されている。

kobito.1382855390.350286.png

kobito.1382855409.636577.png


gradle wrapper

Gradleセットアップをするためのもの。個々の開発環境やビルド環境で個別にgradleをセットアップするのではなく、gradle wrapperを使うことでgradle環境自体も同等のものに合わせられる。


build.gradle

task wrapper(type: Wrapper) {  gradleVersion = '1.8'}


# gradle wrapper

:wrapper

BUILD SUCCESSFUL

Total time: 12.384 secs

~/tmp/gradle# find gradlew
gradlew
~/tmp/gradle# find gradle
gradle
gradle/wrapper
gradle/wrapper/gradle-wrapper.jar
gradle/wrapper/gradle-wrapper.properties

gradle wrapperでダウンロードされたファイルが配置されていれば、

gradleの代わりに gradlewを使うことができる。

初回実行時には、gradleのダウンロード/展開が実行される。

# ./gradlew build

Downloading http://services.gradle.org/distributions/gradle-1.8-bin.zip
..............................................
Unzipping /Users/ntakeda/.gradle/wrapper/dists/gradle-1.8-bin/vruqmccc8532n7gr46qavsii8/gradle-1.8-bin.zip to /Users/ntakeda/.gradle/wrapper/dists/gradle-1.8-bin/vruqmccc8532n7gr46qavsii8
Set executable permissions for: /Users/ntakeda/.gradle/wrapper/dists/gradle-1.8-bin/vruqmccc8532n7gr46qavsii8/gradle-1.8/bin/gradle
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test

org.nt67.FileNumberReaderTest > 失敗するテスFAILEDッド
java.lang.AssertionError at FileNumberReaderTest.java:17

11 tests completed, 1 failed
:test FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///Users/ntakeda/tmp/gradle/build/reports/tests/index.html

* 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: 26.215 secs

kobito.1382945294.113622.png


Eclipseで使う

既存プロジェクトとしてインポートしてもそのまま使える。

gradleで定義したタスクを使うなら、pluginがあったほうが良い。

ここでは Gradle Integration For Eclipse をEclipse Market Placeから導入。

導入後はImportの形式として "Gradle Project"が追加される。

この時、gradlew buildされていなくても、

Import時の画面からModel Buildを実行することで ecipse用の設定が生成されるのでそのままImport可能。


Eclipseからタスクを実行

パッケージエクスプローラからbuild.gradleで Run With を選ぶ。

Antの実行と同じようにタスクの一覧が並ぶ。