eclipse + wtp + gradle で開発環境構築

maven2gradle を使ってみた(メモ) - hd 4.0 で maven2gradle で生成した build.gradle を使って eclipse + wtp で開発できるようにしたのでメモ。

以前の状態だと war 作ったり jettyRun で起動したりはできたけど eclipse + wtp で動かない状態だった。やはり個人的には eclipse で開発できないと辛い。

Gradle STS Support のインストール

eclipse で gradle 使うなら多分これが今のところ一番よさそう。まぁコマンドラインでもいい・・というかコマンドラインで十分な気もしないでもないが。

どっかで STS 入れなくても単体で動くとか見たんだけど、 STS がないと認識されてないっぽかったので STS を入れる。重いらしいがまぁ Spring も使うし・・。特に何も考えず Marketplace から入れた。結構時間掛かる。

Gradle Support は http://static.springsource.org/sts/docs/latest/reference/html/gradle/installation.html あたり参考に Help -> Install New Software から入れた。

Ant ビューっぽくタスクの一覧が表示される。タスク名ダブルクリックで実行。

一度ここから jettyRun したら jetty が止まらなくなったのでそれ以来怖くて jettyRun できない*1

eclipse-wtp プラグインの適用

一行書くだけ。

apply plugin: 'eclipse-wtp'

基本これで eclipse タスクとか eclipseWtp タスクとかやれば済む話のはずなんだけど、地味に色々はまった。

STS のカレントディレクトリの扱い

STS からタスクを実行するとカレントディレクトリが eclispe のインストールディレクトリになってしまう模様。 FileNotFoundException とか連発して泣きそうになった。なのでこんな感じで対応。

Properties props = new Properties()
//props.load(new FileInputStream('/src/main/filters/${project.ext.profile}/build.properties'))
// project.projectDir がプロジェクトのルートディレクトリになる模様
props.load(new FileInputStream("${project.projectDir}/src/main/filters/${project.ext.profile}/build.properties"))
project.ext.props = props

これはフィルター用の環境設定ファイルを読んでるところ。

wtp のサーバーにフィルタリングしたリソースファイルが配置されない

processResourcessrc/main/resources 以下のファイルをフィルタリングすると build/resources/main にフィルタリングしたリソースファイルが配置される。でも wtpWEB-INF/classes 以下に配置されたのは src/main/resources 以下のファイル。 eclipseWtpComponent の配置設定とかいじってみたけど動作変わらず。

仕方ないのでこんなタスク作った。

task filterResources(type: Copy) {
	from("${project.projectDir}/src/main/filters") {
		include '*.properties'
		include 'logback.xml'
		filter(ReplaceTokens, tokens: project.ext.props)
	}
	into "${project.projectDir}/src/main/resources"
}

src/main/filters 以下にフィルタリング前のファイル置いて、こいつをフィルタリングして src/main/resources に置くだけ。なんか釈然としない感は残るがこれで wtp にもフィルタリングしたファイルが配置された。

このへんのフィルタリングはどうやるのが定石なんだろうか?

まがりなりにもこれで eclipse + wtp + gradle で開発できそう。未だに groovy も gradle も全然わかってないけどここからちまちまいじりつつ覚えていきたい。

おまけ

maven でローカルリポジトリに手動登録してたライブラリはプロジェクト内に置いて以下のように参照させれば使えるらしい。ローカルリポジトリに登録するの面倒なのでこっちのがよさげ。

compile fileTree(dir: "${project.projectDir}/src/main/webapp/WEB-INF/lib", includes: ['*.jar'])

これは Gradleでプロジェクト配下のライブラリをクラスパスに追加する方法 - しおしお を参考にさせていただいた。

*1:結局 eclipse 落とした