Gradle で Java アプリのプロジェクトを作成して Eclipse にインポートするまでの手順

公開日: : Java , , , ,

Mac に SDKMAN! を使って Gradle をインストールしたので、実際にプロジェクトを作成してみた。
作成したプロジェクトに自分なりの初期設定を行った上で、Eclipse にインポートすることがゴール。

以下の目次が実際に試した設定になっている(1から6まで)。

GradleLogoReg

目次

1. Gradle を使って Java アプリのプロジェクトを作成するには

Maven の mvn archetype:generate のように Gradle もプロジェクト作成のコマンドは用意されており、Java アプリのプロジェクトを作成する場合は gradle init --type java-library を実行すればよい。
ただし、プロジェクトのディレクトリは作成してくれないので事前に作成しておくこと。

上記のコマンドを実行した直後のディレクトリ構成は以下のようになる。

$ pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/| /g'
/Users/tomoyamkung/tmp/gradle_sample
|--.gradle
| |--2.7
| | |--taskArtifacts
| | | |--cache.properties
| | | |--cache.properties.lock
| | | |--fileHashes.bin
| | | |--fileSnapshots.bin
| | | |--outputFileStates.bin
| | | |--taskArtifacts.bin
|--build.gradle
|--gradle
| |--wrapper
| | |--gradle-wrapper.jar
| | |--gradle-wrapper.properties
|--gradlew
|--gradlew.bat
|--settings.gradle
|--src
| |--main
| | |--java
| | | |--Library.java
| |--test
| | |--java
| | | |--LibraryTest.java

tree コマンドの代替はLinux – tree コマンドが無い環境で tree コマンドを実現 – Qiita を参考にした

src/main/java, src/test/java ディレクトリが作られるところなど基本のディレクトリ構成は Maven と同じ仕様になっている。

src/main/resources, src/test/resources ディレクトリは作成してくれないので、以下の記事のように resources ディレクトリ作成タスクを作って自動生成させてもよいし、1度しか実行しないので手動で作成してもよい。

以下は自動化手順の抜粋(引用)。

build.gradle に以下を追加したあとに gradle initDirs を実行する。

task initDirs {
   sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}

軽く調べた程度だが Maven のように Web アプリ用のプロジェクトを作成してくれる type は存在しないようだった。
あとでもう一度調べてみる。

2. プロジェクトの Java コンパイラバージョンを指定するには

Maven では以下のように maven-compiler-plugin でコンパイラのバージョンを指定できた。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.0</version>
  <configuration>
    <source>1.7</source>
    <target>1.7</target>
    <encoding>UTF-8</encoding>
  </configuration>
</plugin>

一方 Gradle ではもっとシンプルに書ける。どうせコピペするのだが記述量の少なさはうれしい。

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

3. ソースコードのエンコードを UTF-8 に指定するには

コンパイルは compileJava タスクで行われるので build.gradle に compileJava タスクのオプションとして指定する。

compileJava {
    options.encoding = 'UTF-8'
}

4. プロジェクトで使用するライブラリ(dependencies)を追加するには

すでに build.gradle に slf4j-api と junit が設定されているので省略しようと思ったが、よく使う次のライブラリの dependencies を載せておく。完全に自分用。

  • slf4j-simple
  • lombok
  • google guava
  • commons lang3
  • hamcrest-library
  • mockito
compile 'org.slf4j:slf4j-simple:1.7.12'
compile 'org.slf4j:org.projectlombok:lombok:1.16.6'
compile 'com.google.guava:guava:18.0'
compile 'org.apache.commons:commons-lang3:3.4'

testCompile 'org.hamcrest:hamcrest-library:1.3'
testCompile 'org.mockito:mockito-all:1.9.5'

pom.xml ではライブラリのバージョンを変数に定義してバージョン統一をしていた。
build.gradle でも同じことができるんだろうなぁと思いつつまだ試していない。

5. ユニットテストを実行するには

Gradle からユニットテストを実行するには test タスクを実行する。

これは個人的なクセなのだが、ユニットテストを実行する際には毎回 .class ファイルをすべて削除している。
キレイにしてからユニットテストを実行するには以下のコマンドを実行する。Maven と同じだ。

$ gradle clean test

6. 作成したプロジェクトを Eclipse にインポートするには

Eclipse プラグインを使って Eclipse のインポートに必要なファイルを作成する。
build.gradle に以下を追加する。

apply plugin: 'eclipse'

Eclipse が参照する .classpath, .project. .settings ディレクトリの生成は eclipse タスクを実行すると作成される。

$ gradle eclipse

あとは Eclipse からこのプロジェクトをインポートするだけ。

7. ここまでの build.gradle

これで自分なりの初期設定が完了した。
この時点での build.gradle を貼り付けておけば今後のコピペが捗るはずだ。

apply plugin: 'java'
apply plugin: 'eclipse'

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

compileJava {
    options.encoding = 'UTF-8'
}

repositories {
    jcenter()
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.12'
    compile 'org.slf4j:slf4j-simple:1.7.12'
    compile 'org.projectlombok:lombok:1.16.6'
    compile 'com.google.guava:guava:18.0'
    compile 'org.apache.commons:commons-lang3:3.4'

    testCompile 'junit:junit:4.12'
    testCompile 'org.hamcrest:hamcrest-library:1.3'
    testCompile 'org.mockito:mockito-all:1.9.5'
}

task initDirs {
    sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}

8. 更新履歴

  • 2015/09/30: 初版作成

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

no image

画像ファイルを選別するFilenameFilter

画像ファイルのみアップロードを許可する仕様があって、何てことはないがフィルターを作って対応したのでメ

記事を読む

no image

Functions#compose() を使って Function を合成するサンプル(Java8 との比較付き)

Java8 と GoogleGuava の Function について コードの違いを書いた。 その

記事を読む

no image

サーブレットでクラスパス上にあるプロパティファイルを参照するスニペット

よく使うわりにはいつも調べているのでいい加減メモすることにした。 "app.proper

記事を読む

no image

Spark を使って JSON を返すシンプルな API を書いてみた

必要に迫られてモックの API を作成することになった。 大した工数を割けないので使ったことのある

記事を読む

no image

ファイルに関するユーティリティ

ファイルに関するスニペットをいくつか書いた。いつかコピペする日が来ると思うのでメモしておく。 作成

記事を読む

icatch-upload_1229138273_mini-thumbnail

InputStream に格納されているストリームデータのサイズを取得する

Jersey を使った Web アプリを作成中なんですが、 enctype="multipart/f

記事を読む

no image

Stream#filter()で絞り込みmap()で処理するコードスニペット

Java8 から導入された Stream API も少しずつ慣れてきて、「そういえばこういうパターン

記事を読む

icatch-thumbnail

レスポンスにサムネイル画像を返す API のサンプル

今回は直接 ImageMagick は関係ありませんが、また画像ネタです。この辺りのことを仕事で扱っ

記事を読む

no image

Stream#map()とStream#collect()を使ってListを生成する

Java8 から導入された Stream API も少しずつ慣れてきて、「そういえばこういうパターン

記事を読む

no image

Google Guava の Function を使った文字列加工の FluentIterable サンプル

お客様の都合上 Java7 で開発している案件があるのだが、Java8 の Function とか

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


三 − = 2

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑