1. 無料アクセス解析

crossroad's Blog

Javaを中心にした技術ネタなど。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Eclipse + Maven2 + Tomcat + Seasar2 の開発環境ベスト!?プラクティス

昨今、良くある(僕自身も好みの)組み合わせで、
 ・IDE・・・Eclipse
 ・ビルドツール・・・Maven2 及び Eclipse m2eclipseプラグイン
 ・コンテナ・・・Tomcat 及び Tomcatプラグイン
 ・フレームワーク・・・Seasar2 及び S2ファミリー
と言うのがあります。

しかし、開発環境構築は結構難問です。
Eclipse、Maven2、m2eclipse、Tomcatプラグイン...
それぞれ「個別の問題」にフォーカスしたツールを組み合わせようとすると、
細かいところでギャップがあって、各ツールの長所を活かしつつ、うまく連携させるには試行錯誤が必要です。


そこで、以下のような各ツールの長所を活かせる開発環境を作ってみる。

 1.Eclipse
  ・修正したソースのインクリメンタルコンパイル
  ・その他もろもろ...

 2.Maven2
  ・pom.xmlによるプロジェクトメタ情報の定義、一元管理
  ・ビルドの標準化

 3.m2eclipseプラグイン
  ・pom.xmlの依存ライブラリを修正するだけで、
   ライブラリのダウンロード、Eclipseビルドパスを自動更新

   (依存ライブラリを修正するたびに mvn eclipse:eclipse しなくて良い!)

 4.Tomcatプラグイン
  ・Eclipse上でTomcatの起動/停止。
  ・デバッグが簡単。(リモートデバッグしなくて良い!)
  ・DevLoaderを使えば、Warモジュールを作成することなく、
   修正したソースをTomcatに即反映可能


 5.Seasar2 2.4.xのSMART Deploy
  ・HOT deployで、Tomcat(のコンテキスト)を再起動することなく
   修正したソースをTomcatに反映可能

   Seasar2 2.4.x以上が必須になります。

つまり、
必要なライブラリは自動設定されて、修正したソースはTomcatに即反映されて、
Tomcat上でデバッグもできて、Mavenで一貫したビルドもでき、
しかも開発者ひとりひとりの手間を極力省くことができる、環境なのです!!(のはず)


では作り方。
ちなみに、この作業はアーキテクトだけが行う初期作業です。

 1.Eclipse
  特に特別な手順はありません。

 2.Maven2
  ①pom.xmlを書きます。
   maven-eclipse-pluginの設定で、downloadSourcesとdownloadJavadocsをtrueにしておきます。

  ②Eclipseのプロジェクト作成ウィザードを使うのが面倒なので、
   初回だけ「mvn eclipse:eclipse」でEclipseプロジェクトを作成し、Eclipseにインポートします。
   この時点では、クラスパス変数M2_REPOが未定義なので、ビルドエラーになります

  ③プロジェクトのプロパティ、Javaビルドパスから「M2_REPO/~」を
   全て削除します。当然、ビルドエラーになりますが、ここでは無視します。

 3.m2eclipseプラグイン
  ①m2eclipseをインストール。

  ②Eclipseの設定のMaven2で、ソースのダウンロードと、JavaDocのダウンロード
   を有効(チェックON)
にしておきます。

  ③プロジェクトを右クリック→Maven2 で、Maven2特性を有効にします。
   Maven2 Dependenciesと言うクラスパスコンテナが作成されます。
   この時点でビルドが通るはずです。

   これ以降は、pom.xmlを修正すればライブラリのダウンロード~ビルドパス設定が
   自動的に行われます。
   mvn eclipse:eclipse でビルドパスを更新する必要はありません

 4.Tomcatプラグイン
  ①Tomcatプラグインをインストールし、基本設定。
   
  ②dragon3さんが公開している改変版DevLoaderを入手し、
   Tomcatにセットアップ。

   TomcatプラグインにバンドルされているオリジナルのDevLoaderを使うと、
   pom.xmlにservlet-api-xxx.jarへの依存性が含まれていると実行時にClassCastExceptionが発生
します。
   逆に言えば、Servlet API を使わなければ、オリジナルのDevLoaderでも構いませんが、
   Servlet APIを使わないということは少ないのかなと思います。

  ③プロジェクトのプロパティ、Tomcatで以下の通り設定。
   ・Tomcatプロジェクト・・・ON。
   ・コンテキスト名・・・任意の名前を入力。
   ・コンテキスト定義の更新を可能にする・・・ON。
   ・このコンテキストを再読込可能にする・・・OFF
    (ONにすると、ソースを修正するたびにコンテキストが再起動してしまいます)
   ・Webアプリケーション・ルートとするサブディレクトリ・・・main/src/webapp
   ・開発用クラスローダを有効にする・・・ON
    /PROJECT_NAME/target/classes
    org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER をチェックON。
    (個々のライブラリをチェックONにしてしまうと、.tomcatpluginに絶対パスが書かれてしまい、再配布できません)

 5.Seasar2
  env.txt で、開発時はHOT Deployが有効になるようにしておきます。
  こうすることで、コンテキストを再起動することなく、修正したソースをTomcatに即反映できます。

 6.配布
  pom.xml.classpath.project.tomcatplugin を含めて、プロジェクトを配布(CVSやSVNにコミット)します。
  (通常はpom.xmlだけで、.classpath等は含めないことが多いと思いますが)

  なお、これらのファイルに特定の環境に依存する値(絶対パスなど)が書かれていないのが、再配布可能にするミソです。

  各開発者は、配布されたプロジェクトをEclipseにインポートするだけで、
  特別な設定をしなくても開発できる
はずです。


以上で、快適な開発環境ができる...と思います。

一応、ざっくりと動作確認していますが、うまくいかなかった場合はご容赦をm(_ _)m


スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2007/10/16(火) 00:18:07|
  2. ソフトウェア開発 Java
  3. | トラックバック:1
  4. | コメント:0

Seasar Teeda を Tomcat PlugIn+DevLoader で稼動させると例外発生

Seasarファウンデーションの Teeda を勉強しようと思い、
Eclipse Europa(3.3)
・Sysdeo Tomcat PlugIn+DevLoader
Maven2
Teeda 1.0.10
Tomcat 5.0.x

で環境を作って、簡単なプログラミングをしたのですが、
ちょっとハマりました。

Teeda では、ViewをJSPではなく、HTMLとして作成できるのが
ひとつウリなようですが、まずはそれを試そうと思い、
単純なHTMLを作成。
特にManaged Beanと連携するわけでもない、本当にただのHTMLです。

で、Tomcat PlugIn+DevLoaderを使ってTomcat上で実行。
作成したHTMLにアクセスしてみると...あらら例外発生

org.seasar.teeda.core.exception.UriNotFoundRuntimeException:
[ETDA0026]URI(http://www.seasar.org/teeda/extension)が見つかりません org.seasar.teeda.extension.config.taglib.impl.AbstractTaglibManager.getTaglibElement(AbstractTaglibManager.java:68)
<以下略>


うーむ、TeedaタグライブラリのURIが見つからん、と言われています。


結論から言うと、原因はDevLoaderを使っていることに起因していました。

Maven2とTomcat PlugIn+DevLoaderを使用しているので、
 ・DevLoaderを使用しているので、J2EE規定のWebアプリケーションの
  ディレクトリ構造にしていない
(※)。(WEB-INF/classesやWEB-INF/libがない)
 ・タグライブラリのクラスやTLDファイルは、Jarファイルにまとめられていて、
  TLDファイルを明示的に配置していない。
 ・Teedaその他の稼動に必要なJarファイルは、Mavenのローカルリポジトリ上にある

 ※DevLoaderを使うと、Webアプリ構成になっていなくても
  TomcatにクラスやJarをロードさせ、Webアプリとして稼動させることができます。


と言う状態で動作させているのですが、

回り道日記によると、Jar中にTLDファイルを含める場合、
WEB-INF/lib 下にJarを置かないとTLDファイルを見つけてくれないようです。

上述の通り、今回はTLDファイルを含むJarファイルが、Maven2のローカルリポジトリ上に
存在するので、TLDファイルが見つからず、エラーになっているのでした。


対処の方法はいくつかありそうです。









































No.概要説明Tomcat PlugInDevLoader評価



TLDファイルを、WEB-INF下に配置する

JarからTLDファイルを取り出し、WEB-INF下に配置します。
(参考 Mayaa メーリングリスト

この方法であれば、Tomcat PlugIn+DevLoaderによる効率的な開発が可能です。
ただ、本来必要のないTLDファイルを配置することになってしまうのがタマに傷な気がします。

使用する

使用する





TLDファイルを含むJarを、WEB-INF/lib下に配置する

TLDファイルを含むJarを、Maven2ローカルリポジトリから、WEB-INF/lib下にコピーします。

この方法も、Tomcat PlugIn+DevLoaderによる効率的な開発が可能です。
しかしながら、せっかくMaven2でJarを一元管理しているのに、それとは別にJarを配置・管理することになり、ちょっと頂けません。

使用する

使用する





Webアプリケーション構造を作成し、Tomcatのコンテキストに追加する

Webアプリのディレクトリ構成(WEB-INF/classesやWEB-INF/libなど)を作成し、Tomcat PlugInのWebアプリケーションルートとして指定します。

この場合は、DevLoaderを使わないので、Javaソース等を修正したらリアルタイムにTomcatに自動反映ができず、Tomcatに反映するにはWebアプリ構成を更新する必要があります。

ただ、Webアプリ構成の作成・更新は、Maven2のwar:explodedゴールを使えば簡単にできますし、逆に言えば「ちょっと直しただけでいちいちTomcatがリロードしてうっとおしい」と言う事がなくなるので、むしろ利点と言えるかもしれません。

使用する

使用しない





普通にWarモジュールを作成、Tomcatにデプロイする

Tomcat PlugInはあきらめて、普通にWarモジュールを作成・デプロイします。

この場合は、修正したソースを反映させるためには、Warの生成とTomcatへのデプロイが毎回ともなうので、開発効率が低下してしまいます。

使用する

使用しない

×



個人的には、3.の方法が好みかなと思います。

尚、補足するとこの現象はTeedaに固有の話ではなく、
 ・TLDファイルがJarに格納されている
 ・Jarファイルを、WEB-INF/lib下に配置せず、Tomcat PlugIn+DevLoaderでロードしている
場合
には、常に問題になるはずです。



それにしても、Teeda良くできてるなぁ...
素にJSFを使うと、faces-config.xmlがかなり問題になりそうですが、
それもS2Containerの自動登録機能で解決
いやぁすごい。



  1. 2007/08/22(水) 21:10:54|
  2. ソフトウェア開発 Java
  3. | トラックバック:0
  4. | コメント:0

プロフィール

crossroad

Author:crossroad
関西在住。男。
フリーランスのソフトウェアエンジニア。
エレキベース(Rock&Roll)とお酒が好物でございます。

カテゴリー

タグリスト

Java F1 フリーランス ベーシスト HARRY TheStreetSliders iPhone FX お酒 Seasar Maven eclipse Wicket マイホーム 野球 プロジェクトファシリテーション Rails Ruby UML お店 ソフトウェア Tomcat S2Flex2 jsf Teeda Eclipse タグライブラリ ajax タスク europa mylyn trac 

ブログ内検索

最近の記事

最近のコメント

最近のトラックバック

カレンダー

04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

月別アーカイブ

全ての記事を表示する

全ての記事を表示する

Twitter


RSSフィード

リンク

このブログをリンクに追加する

アクセスカウンタ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。