EclipseのGradleプロジェクト作成方法比較

##概要
EclipseでGradleのJavaプロジェクトを使う場合、プロジェクトを作成する方法がいくつかあります。各方法の違いが知りたかったので調査してみました。

プロジェクトの作り方を大別すると、コンソールからgradleコマンドで作成する方法と、Eclipseにプラグインを入れてメニューから作る方法に分かれるかと思います。さらに、Eclipseのプラグインは何種類かあるようなので、メジャーそうなのをためしています。

- 方法１：コンソールからgradleコマンドでプロジェクトを作成
- 方法２：Gradle IDE Packプラグインで、Eclipse上からプロジェクトを作成
- 方法３：Gradle (STS) Integration for Eclipseプラグインで、Eclipse上からプロジェクトを作成
- 方法４：Eclipse公式のBuildshipプラグインで、Eclipse上からプロジェクトを作成

検証環境

- Mac
- java 1.8.0_65
- Gradle 2.12
- Eclipse Java EE IDE for Web Developers (Mars.2 Release (4.5.2))


##各種インストール

###方法１：コンソールからgradleコマンドでプロジェクトを作成

Gradleはあらかじめインストールされていて、gradleコマンドが使える状態にしておきます。

```
$ gradle --version
------------------------------------------------------------
Gradle 2.12
```

コンソールからJavaプロジェクトを作成します。今回は、create_gradle-cmdという名前で作りました。

```
mkdir create-gradle-cmd
cd create-gradle-cmd/
gradle init --type java-library
```

「gradle init --type java-library」でJavaのスケルトンプロジェクトが作成されます。

```
$ ls -la
total 40
drwxr-xr-x  3 grachro  wheel   102  3 21 21:32 .gradle
-rw-r--r--  1 grachro  wheel  1216  3 21 21:32 build.gradle
drwxr-xr-x  3 grachro  wheel   102  3 21 21:32 gradle
-rwxr-xr-x  1 grachro  wheel  4971  3 21 21:32 gradlew
-rw-r--r--  1 grachro  wheel  2404  3 21 21:32 gradlew.bat
-rw-r--r--  1 grachro  wheel   651  3 21 21:32 settings.gradle
drwxr-xr-x  4 grachro  wheel   136  3 21 21:32 src
```

build.gradleの「apply plugin: 'java'」の下に「apply plugin: 'eclipse'」を追加します。

```groovy:build.gradle
apply plugin: 'java'
apply plugin: 'eclipse'
```

コンソールからgradleコマンドを実行します。

```
gradle eclipse
```

GradleのJavaプロジェクトにEclipse用のプロジェクトファイルが追加されます。

```
$ ls -la
total 56
drwxr-xr-x  12 grachro  wheel   408  3 21 21:45 .
drwxr-xr-x   4 grachro  wheel   136  3 21 21:32 ..
-rw-r--r--   1 grachro  wheel  1343  3 21 21:45 .classpath
drwxr-xr-x   3 grachro  wheel   102  3 21 21:32 .gradle
-rw-r--r--   1 grachro  wheel   360  3 21 21:45 .project
drwxr-xr-x   3 grachro  wheel   102  3 21 21:45 .settings
-rw-r--r--   1 grachro  wheel  1240  3 21 21:41 build.gradle
drwxr-xr-x   3 grachro  wheel   102  3 21 21:32 gradle
-rwxr-xr-x   1 grachro  wheel  4971  3 21 21:32 gradlew
-rw-r--r--   1 grachro  wheel  2404  3 21 21:32 gradlew.bat
-rw-r--r--   1 grachro  wheel   651  3 21 21:32 settings.gradle
drwxr-xr-x   4 grachro  wheel   136  3 21 21:32 src
```

Eclipseを立ち上げてインポートします。
<img width="621" alt="05_プロジェクトインポート.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/7b5f00c6-0e65-0e64-118a-aea8ec9c3eb5.png">
<img width="622" alt="06_プロジェクトインポート.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/cab486fb-0c30-59ed-7116-08fe60697aa9.png">

**作成されたプロジェクト**
<img width="250" alt="スクリーンショット 2016-03-21 23.16.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/f3b4990c-9bc0-2d40-0b62-f42abe2b01fc.png">



```groovy:build.gradle
/*
 * This build file was auto generated by running the Gradle 'init' task
 * by 'grachro' at '16/03/21 21:32' with Gradle 2.12
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * user guide available at https://docs.gradle.org/2.12/userguide/tutorial_java_projects.html
 */

// Apply the java plugin to add support for Java
apply plugin: 'java'
apply plugin: 'eclipse'

// In this section you declare where to find the dependencies of your project
repositories {
    // Use 'jcenter' for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

// In this section you declare the dependencies for your production and test code
dependencies {
    // The production code uses the SLF4J logging API at compile time
    compile 'org.slf4j:slf4j-api:1.7.18'

    // Declare the dependency for your favourite test framework you want to use in your tests.
    // TestNG is also supported by the Gradle Test task. Just change the
    // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
    // 'test.useTestNG()' to your build script.
    testCompile 'junit:junit:4.12'
}
```

###方法２：Gradle IDE Packプラグインで、Eclipse上からプロジェクトを作成

Nodeclipseが配布しているプラグインです。このプラグインが、「eclipse gradle プラグイン」とかでググった時に一番よく見かけます。


<img width="661" alt="スクリーンショット 2016-03-22 0.32.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/0024a5c7-0034-c635-31c9-3a10c18c184d.png">




サーバーエラーでインストールできませんでした。
<img width="474" alt="08_Gradle_IDE_Pack.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/b849472f-9dee-bf6a-5103-6415eff64520.png">

###方法３：Gradle (STS) Integration for Eclipseプラグインで、Eclipse上からプロジェクトを作成

Pivotalが配布しているプラグインです。STSとあるので、本来はSpring Tool SuiteからGradleを使うことを想定されたプラグインなのかもしれません。

<img width="661" alt="09_Gradle (STS) Integration for Eclipse.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/6335b5ca-38ca-4064-795d-4b820071d0b7.png">

<img width="773" alt="10_Gradle (STS) Integration for Eclipse2.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/1ac6c3c6-4bac-c0e8-0135-9fbe679c4ee1.png">

インストールが終わったらEclipseを再起動して、メニューからプロジェクトを作成します。今回は、create_stsという名前で作りました。

<img width="637" alt="11_Gradle (STS) Integration for Eclipse_3.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/50895f1d-c61c-47a3-a4fe-a6f7a7039232.png">

*（「Gradle(STS)」メニューの上の「Gradle」メニューは、後述するBuildshipのメニューです。）*

<img width="637" alt="12_Gradle (STS) Integration for Eclipse_4.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/78999db3-a6db-9f80-8001-a7a2aefe9c6d.png">

**作成されたプロジェクト**
<img width="280" alt="スクリーンショット 2016-03-21 23.05.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/76df3f48-3d50-fbe5-d534-af36fa61e7bd.png">

```groovy:build.gradle
apply plugin: 'java'
apply plugin: 'eclipse'

sourceCompatibility = 1.5
version = '1.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart',
                   'Implementation-Version': version
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

test {
    systemProperties 'property': 'value'
}

uploadArchives {
    repositories {
       flatDir {
           dirs 'repos'
       }
    }
}
```

###方法４：Eclipse公式のBuildshipプラグインで、Eclipse上からプロジェクトを作成

Install New SoftwareからBuildshipプラグインを探してインストールします。（マーケットプレイスからでも入れられると思います。）

<img width="953" alt="01_eclipse公式のGradleプラグイン_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/d6078f06-f2ad-af65-f86c-fe43ca0ab61c.png">

インストールが終わったらEclipseを再起動して、メニューからプロジェクトを作成します。今回は、create_Buildshipという名前で作りました。

<img width="637" alt="01_eclipse公式のGradleプラグイン_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/64131533-6e09-da94-5246-3d0da082a620.png">

<img width="758" alt="01_eclipse公式のGradleプラグイン_03.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/4fed74eb-54b4-d9e1-d8c3-c934c8431c32.png">

<img width="758" alt="01_eclipse公式のGradleプラグイン_04.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/1df7b471-e309-11b3-c04f-83e4a48ac508.png">

**作成されたプロジェクト**
<img width="279" alt="スクリーンショット 2016-03-21 23.13.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/88743/2b975c3c-fbb1-b147-a03b-989d6beded3f.png">



```groovy:build.gradle
/*
 * This build file was auto generated by running the Gradle 'init' task
 * by 'grachro' at '16/03/21 21:13' with Gradle 2.9
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * user guide available at https://docs.gradle.org/2.9/userguide/tutorial_java_projects.html
 */

// Apply the java plugin to add support for Java
apply plugin: 'java'

// In this section you declare where to find the dependencies of your project
repositories {
    // Use 'jcenter' for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

// In this section you declare the dependencies for your production and test code
dependencies {
    // The production code uses the SLF4J logging API at compile time
    compile 'org.slf4j:slf4j-api:1.7.13'

    // Declare the dependency for your favourite test framework you want to use in your tests.
    // TestNG is also supported by the Gradle Test task. Just change the
    // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
    // 'test.useTestNG()' to your build script.
    testCompile 'junit:junit:4.12'
}

}
```

##各方法の比較結果

###方法１：gradleコマンド
IDE上で全部済ませる手軽さに比べると若干面倒ですが、Gradleプロジェクト公式方法なので一番安心感があります。apply plugin: 'eclipse'の代わりに、'idea'にすると IntelliJ IDEA用の設定も作れるので、今後の応用も聞きます。

###方法２：Gradle IDE Pack
一番メジャーだと思われるプラグインですが、サーバが落ちてたのでためせまんでした。Eclipseのプラグインを入れるときにはありがちです。
（~~日を改めてチャレンジするかも。~~　2016/3/28追記： [追加検証](http://qiita.com/grachro/items/16bba860f9d9fe5ee4c5)しました。）



###方法３：Gradle (STS) Integration for Eclipse
他の方法と大きく違う点は、gradlew、gradlew.bat、settings.gradleの3ファイルが無いことです。その他細かい点では、他の方法だとJavaのコンパイルレベルがIDEのディフォルトを使うのに対し、STSでは1.5が指定されています。
dependenciesのライブラリには、特にSpring系のものが無い代わりに、なぜかcommons-collectionsがディフォルトで定義されていました。また、org.gradle.Personクラスが作られています。Springフレームワークを使うには便利な状態なのかもしれません。

###方法４：Buildshipプラグイン

Eclipseプロジェクトが配布しているプラグインなので、Eclipseから使うには一番手軽です。作成されたプロジェクトの構成は、gradleコマンドで作成した場合とほぼ同じです。

gradleコマンドとBuildshipプラグインの違い

- Buildshipの方には、apply plugin: 'eclipse'が設定されていない
- Buildshipの方が、dependenciesで指定しているライブラリのバージョンが古い（EclipseのプラグインのアップデートはGradleのアップデート後になるはずなので、今後も仕方ないかも。）
- gradleコマンドが作成する設定はEclipseの従来のJavaプロジェクトの設定をシミュレートしているのに対し、Buildshipの方はgradle.prefsとorg.eclipse.buildship.core.prefsという新しい設定ファイルを作成している。
- 依存するjarファイルが、Buildshipの方はProject and External Dependensies変数にまとまっているのに対し、gradleコマンド方は各jarが直接Build Pathに追加されている（そのためProjectツリーが煩雑になる）。

##github
今回作成したプロジェクトの詳細は[github](https://github.com/grachro/comparison_create_gradle_project_for_eclipse/tree/master/create-Buildship)で見れます。

##2016/3/28追記
Gradle IDE Packプラグインも比較できました。
**[EclipseのGradleプロジェクト作成方法比較（追補編）](http://qiita.com/grachro/items/16bba860f9d9fe5ee4c5)**