Maven2 + Eclipse + Tomcatプラグイン の組み合わせ

忘れそうなので覚えているうちにメモ。
ネットで調べても、この辺は、みんないろいろ試行錯誤しているような感じに思えた。


ちなみに、TomcatプラグインじゃなくてWTP使ったとしても、悩むとこは同じだと思う。(試せてないけど、WTP使う気になれない。重すぎる印象があるので。)

war:inplaceを使う

TomcatプラグインのDevLoaderは使わずに、src/main/webapp/配下にmavenのwar:inplaceで配置してデバッグを行う。
maven使わない場合のEclipse + Tomcatプラグインと同じような感じ。
src/main/webapp/WEB-INF/lib、src/main/webapp/WEB-INF/classesはSubversionCVSの除外ファイルとしておく。

war:inplaceはコマンドラインからやってもいいけど、m2eclipseがあれば、外部ツールとして起動した方が楽。


このやり方の問題点は、、
Eclipseのビルドと連動しない(Eclipseのビルドでは、target配下にコンパイル後のクラスが吐き出される)ところ。
これは、ビルダーの設定で、m2eclipseのwar:inplaceを実行するようにしてあげれば解消できそうだけど、ビルドのたびにwar:inplaceが実行されるのは結構ストレスな感じがする。
あと、依存するjarが変わった際に、src/main/webapp/WEB-INF/lib 配下に古いjarが残ってしまう。というのも、単にcopyしかされないから。
これはもしかするとwar:inplaceに対する設定で回避できるかもしれないし、後はsrc/main/webapp/WEB-INF/libを一旦削除するタスクを組み合わせてあげれば回避できると思うけど、まだそこまでやっていない…
が、どちらにせよ、快適というまでは程遠いような気がする。。

TomcatプラグインのDevLoaderを使う (ビルドパスはm2eclipseのMaven2 Dependenciesを使う)

DevLoaderを使うと、クラスパスを指定できるので、それでjarとclassesを指定する。
jarはm2eclipseのMaven2 Dependencies経由でmavenのローカルリポジトリとなり、classesはtarget/classes となる。

これだと、mavenを実行する必要なく、EclipseのビルドのみでTomcatと連携して開発できる。


このやり方の問題点は、DevLoaderで指定するjarのパスが、そのままのファイルパスとなり、個人のマシンに依存するところ。
したがって、.tomcatpluginが、Subversionなどで共有できないということになる。
結構致命的な感じがする。(個人にこういった設定をさせるのは、あまりやりたくない)

TomcatプラグインのDevLoaderを使う (ビルドパスはmaven-eclipse-pluginで設定)

m2eclipseのMaven2 Dependencies だと、.tomcatpluginを共有できないので、Maven2 Dependencies ではなく、maven-eclipse-pluginを使ってパスを設定する。
maven-eclipse-plugin(mvn eclipse:eclipse)で設定したパスは、M2_REPOという変数が使われるので、個人の環境に依存しなくなる。

これで、.tomcatpluginも共有できる。

依存jarが変わったときに、再度maven-eclipse-pluginを実行しなければならないが、そういった作業の際はpom.xmlも合わせて変えると思うので、pom.xmlを変えた人がmaven-eclipse-pluginを実行して、.classpathを登録しておけばOK。
あとは、M2_REPOという変数を各自設定してもらう必要があるけど、それほど手間ではないかなと思う。(1回設定すればいいので)