Help us understand the problem. What is going on with this article?

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の実行と同じようにタスクの一覧が並ぶ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away