opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

Groovy + Gradle + Eclipseなプログラミング環境を整える

ということでビルドツールとしてGradle,言語としてGroovy,IDEとしてEclipseな開発環境を作っていこうかと思います...
今日はちょっと3つ目の記事だな・・・明日に回そうと思ったけど忘れる前にメモをしておきたかったのでメモしておくお。
一応、ある程度のUNIX系の知識がいるかもしれない。(PATHの通し方とか)

今回の目標は、Mac上でEclipseとGradleを使ってGroovyの開発環境を整えてみようということ。

作業環境

OS::MacOSX Lion
Java::OpenJDK7 (JDK6でも試してないけどokだと思う)
Gradle::1.1
Groovy::2.0.1

準備(Eclipse)

とりあえず準備に入る。今回準備するものはGradleとEclipse。GroovyはGradleに依存関係としてインストールさせるので手動でインストールする必要はない。
ということでまずはEclipseを用意する。

http://www.eclipse.org/

こちらのURLからDownloadできる。えっと「Eclipse IDE for Java Developers」という奴で大丈夫だと思われる。
それにしても最近バージョン上がったのかな?気がついたらなんか見た目が変わってる。

とりあえず上のように起動することが確認できたら、次の作業にうつる。
続いて、EclipseにGroovyプラグインをインストールしておく必要がある。よって以下のプラグインをインストールする。

http://groovy.codehaus.org/Eclipse+Plugin

メモのメインはプラグインの導入方法ではないので導入方法は割愛する。分からない人は多分探せばやり方は普通に出てくると思うのでそちらを参照(すみませんorz)

準備(Gradle)

続いて、Gradleを用意する。

http://www.gradle.org/

同様に上のURLからDownloadできる。現時点でバージョンは1.1のようだ。なのでこれをDownloadする。(gradle-1.1-bin.zipというのを選ぶといいよ)

ダウンロードできたら、展開し任意のディレクトリに配置しPATHを通す。念のためGRADLE_HOME環境変数を設定しておくといいと思うよ。


具体的には、ダウンロードしてきたzipを展開し任意のディレクトリに配置。その中にbinというディレクトリがあるのでそこにPATHを通す(->結果としてgradleコマンドが動けばおk)
で、最後にGRADLE_HOMEにzipを展開したディレクトリへのPATHを設定すればいい。
例えば、$HOME以下にgradleという名前で展開して出てきたディレクトリを配置したとすると、うちの.zshrcは

export GRADLE_HOME=$HOME/gradle
PATH="$PATH":$GRADLE_HOME/bin

という具合になる。

プロジェクトを作る

準備は完了したのでプロジェクトを作る。まず、プロジェクト用のディレクトリを適当なところに制作する。

$ mkdir testproject
$ cd testproject

そして早速build.gradleを作る。

$ touch build.gradle

内容はこんな感じ。

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

def jdkVersion = 1.7 //1.6ならjdkVersionは1.6にしてね。(うちはOpenJDK7を入れてるので1.7)
sourceCompatibility = jdkVersion
targetCompatibility = jdkVersion

//groupなどは適当に決定すること
group = 'com.opamp.testproject'
version = '0.0.1'
#artifactはTestProjectという名前にする。
artifact = 'TestProject'

//この記述は必要で、これがない場合eclipseがビルドしたclassファイルがプロジェクト以下のbinの中に入ってしまう。
//もちろんそれでもいいならいいんだけど、今回gradleやeclipseがビルドやビルド過程で生成したものはbuildディレクトリ以下に入れるよう統一する。
//どんな環境でも以下の記述は書き換える必要がないのでコピペしてくださればおk
eclipse.classpath.file {
        whenMerged { classpath ->
                classpath.entries.findAll { entry -> entry.kind == 'output' }*.path = 'build/bin'
        }
}

//これも絶対書く。
repositories {
        mavenCentral()
}

//依存関係でGroovyをインストールする。バージョンは2.0.1 以下のをコピペでおk
dependencies {
        groovy "org.codehaus.groovy:groovy-all:2.0.1"
}

こんな具合。説明はコメントで記述してみてる。

続いて、上で設定したルールにしたがってソースを入れるディレクトリなんかを作る。
(以下のコマンドはプロジェクトのrootで実行してる つまりは先程作ったtestprojectディレクトリ直下)

$ mkdir -p src/main/groovy/com/opamp/testproject

src/main/groovyまでは共通 (ちなみにjavaを使う場合はgroovyではなくjavaとする)
その後の"com/opamp/testproject"の部分は先程build.gradleで設定したgroupに設定したのと同じになるように記述する。

続いてMainになるgroovyソースファイルを制作する。(これは後でeclipseでやってもいいかもしれないけど自分がやったときここで制作したのでとりあえずここで制作しておく)

先ほど作った"src/main/groovy/com/opamp/testproject"の中にTestProject.groovyファイルを作成する。
以下のコマンドもプロジェクトのルートから実行してるものとする

$ touch src/main/groovy/com/opamp/testproject/TestProject.groovy

結果として以下のような構造になっている。

Eclipseにimportする

ここまでできたらeclipseにいよいよimportしてみる。まず、プロジェクトのroot(build.gradleがある場所)で

$ gradle eclipse

と入力する。(失敗した場合build.gradleの構文が間違えていたりする可能性があるのでエラーを読んで間違いを訂正する)
成功したらEclipseからインポートする。

上のようにImportを選んで...

という具合に「Existing Project into Workspace」的なのを選択。

で、上のように先ほど準備したプロジェクトのディレクトリを指定する。


うまく行けば開けるはず。

まずはHello world的な事をしてみる

まずは定番んおHello world的なことをする。開けたら以下のようにMainのgroovyソースファイルに適当なコードを記述。
日本語の表示を試すために日本語で書いてみた


もし、実行しようとして以下のような画面がでたら

というようにJava Applicationを選択そして

と、自分のMainのクラス(ここではGroovyソースに書いたTestProjetクラス)を指定してやる。

これで実行されるはず。これで文字化けするようだったらさらに以下のように対処する

とプロジェクトのプロパティを開き...

と、画像のように選択してEditを...


として適当な文字コード(UTF-8など)を設定すればおk.

これでもう一度実行したら多分文字化けがなくなってくれるはず。

GUIを使ってみる。

ということで詳しい作業はカットして、新しいパッケージ"com.opamp.gui"を作り、そこにWindow.groovyファイルを作成。

新しいファイルを作るとき、新しいclassを作成すると◯◯.javajava用のクラスが作成されてしまう。
なので、新しいGroovyファイルを作る場合単に"File"を選択して空のファイルから作成するようにする。

そして以下のようなコードを記述

// This is Window.groovy
package com.opamp.gui

import javax.swing.*
import java.awt.*


class Window extends JFrame {
	private JLabel label;
	
	Window(){
		this.setSize(new Dimension(300,200))
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
		
		label = new JLabel("こんにちわ")
		
		this.add(label,BorderLayout.CENTER)	
	}
}

MainのTestProject.groovyは以下のように修正

//This is TestProject.groovy
package com.opamp.testproject
import com.opamp.gui.*

class TestProject {
	static main(args) {
		println "開始"
		
		def win = new Window();
		win.setVisible(true)
	}
}

そして実行・・・

という具合に動作。

Swingを使ったGUIも普通に動いた。さすがGroovyさん。

jar化する

最後にjar化する。ここはEclipseは使えない(使えるかもしれないけど知らない 多分その方法探して試行錯誤してる暇があったらおとなしくターミナル開いたほうが速い)

jar化するにはbuild.gradleに以下の記述を追加する。(末尾とかでおk)

jar {
    from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
manifest.mainAttributes("Main-Class" : "com.opamp.testproject.TestProject")//ここは環境によって若干書き換える

上の「環境によって若干書き換える」というのは、後ろのダブルクォーテーションに囲まれた"com.opamp.testproject.TestProject"という部分。これにはpackage名も含めてMainクラスを記述する。

こちらも参照

ということでかけたら

$ gradle build

を実行...
成功したら build/libs以下にjarができてるはず。

最後に

ということで、このプロジェクトを実験プロジェクトということでgithubにうpしてみた。

https://github.com/opamp/testproject3

READMEにも書いてるけど、gradle eclipseも何もしてない状態なのでgradle eclipseしてやらないとeclipseで読み込んだりできないよ。


結構ほかの記事を見てると、gradle eclipseで生成される.classpathに絶対PATHが記述されてしまうため様々な環境の開発者向けに公開するのはここままではまずいといろいろ対策をしてる記事を見るけど、うちの場合はそれをしないでgradleを完全に走らせる前の状態で公開して、eclipse用に変換するのもしないのもその人の勝手って感じにしようかと思ってる・・・

とりあえずそんな感じ。

さて、Eclipseにviライクな操作ができるプラグインでも入れるか・・・vi操作ができない環境でのプログラミングは苦痛orz


※もしなにか間違いや、改善したほうが良い箇所があればよろしければ指摘してくださると嬉しいです。

Firefox ブラウザ無料ダウンロード