21
23

More than 5 years have passed since last update.

Eclipse + Maven + Tomcat の開発環境を快速に!?

Last updated at Posted at 2015-06-14

Eclipse + Maven + Tomcat の開発環境を快速に!?

Mavenビルドは強力ですが、Eclipse のインクリメンタルビルドに比べると遅いのが難点です。

特にWebアプリ開発で頻繁に HTML や javascript を修正する場合、
いちいち Tomcat に deploy するのでは、そのたびに時間がかかってとてもやってられません。

というわけで、ビルドを Eclipse と maven で使いわける方法にたどりつきました。

  • 通常の開発は Eclipse ビルドだけ
  • 正式のテストや deploy は maven ビルド

要は、Eclipseビルドと maven ビルドをへんに連携するより、はっきり分けてしまえ、という発想です。

(なおこの記事は github pages にも入れています)

主な開発環境

  • Java 7
  • Tomcat 7 ~ ここではデバッグ用のローカルの Tomcat を前提
  • Maven 3
  • Eclipse Luna
    • m2e plugin
    • sysdeo Tomcat plugin (古い! WPT でも同様にできると思う)

フォルダー構成

とりあえず maven 標準に合わせます。
★が Tomcat さんに見てほしいフォルダーです。
[app] は Webアプリの名前(Tomcatのコンテキスト名)です。

project/
 |- src/    # ソース
 |   |- main/
 |   |   |- java/ 
 |   |   |- resources/ 
 |   |   |- webapp/   ★ HTML,css, javascript、WEB-INF/web.xml などなど
 |   |
 |   |- test/
 |   |   |- java/ 
 |   |   |- resources/ 
 |
 |- (Maven Dependencies)/ ★ Maven の dependencies で設定した参照ライブラリ
 |
 |- target/ # 生成物
 |   |- classes/   ★ Java ソースからの生成クラス
 |   |- test-classes/
 |   |- [app]/  ~ mvn package で生成される
 |   |- [app].war ~ mvn package で生成される. 上の [app]/ をアーカイブしたもの
 |   |- その他 maven がいろいろ生成

ちょこちょこ設定

やりたいことは src/main/webapp にある HTML、javascript などの
ちょっとした修正をすぐローカルの Tomcat に反映させたい、ということです。
そのため Tomcat さんにはこのフォルダを直接見てもらう ようにします。

Eclipse のビルドパス設定
- src/main/webapp/ をソースフォルダーから外す
- java/, resources/ の出力先は通常通り target/classes/ (test-classes/) に

Tomcat プラグインの設定
- 開発用クラスローダーを有効に
- target/classes/ と Maven の参照ライブラリを選択1

Tomcat の コンテキスト.xml の設定
- antiResourceLocking,antiJarLocking を false に
- docbase を上の src/main/webapp/ に

結果

これで HTML、javascript の修正はブラウザの再読み込みだけですみます。
(ブラウザのキャッシュには注意必要)

Java ソースを修正した場合は、自動or手動で eclipseビルドすれば
target/classes/ が更新されるので、Tomcat が勝手にアプリを再ロードしてくれます。

  • Javaソースの修正が頻繁な場合には何度も Tomcatの再ロードが起こってわずらわしいので、 自動ビルドを停止 or Tomcat 自体を停止します

というわけで、開発はとっても快適になったのですが、
不精な方法で多少問題もあるので2、もっとよいやり方があれば教えてください。

その他

ほんとは、webapp/WEB-INF/classes に Javaソースの出力先を指定できれば上の「開発用クラスローダーの設定」はいらないのだけど、
maven との競合、eclipse ビルドの出力先をネストできない、などの問題から上のようにしています。

なお上の設定では、target/classes が eclipse ビルドと maven で共用してますが、分けてもよいです。

また maven 用には、別に Tomcat のコンテキスト (ex. [app]-mvn)を作成し、
その docbase で target/[app]/ を参照すれば (mvn package は必要だけど)、
maven ビルドのチェックもできます。

参考


  1. よくわすれるのだが、servlet-api.jar など Tomcat にあるライブラリは外すこと。クラスローダー関連でわけのわからないエラーがでてしまう。 

  2. Eclipse内でのテスト(testNG)とか、main()をRUNする場合に、何かへん? たぶん m2e さんが余計なことをやってしまっているような気がする‥ 

21
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
23