たぷつきません

おなかがでてきた。もうたぷついてるやん。

maven2 with Sysdeo tomcat plugin まとめ

 maven2のwarプロジェクトとtomcat pluginの組み合わせでちゃんと動作するようになるまでの手順を以下にまとめておく。

  1. tomcat plugin 3.2.1(私のパッチを当てたもの)に入れ替える。
  2. warプロジェクトのsrc/main/webapp/WEB-INF/libの中身は空にする。
    • ※※ちなみにmayaaとの組み合わせでは注意が必要。mayaaでは、タグライブラリの定義(tld)を得るために WEB-INF/libの中にあるものをあてにするため。参考
  3. HttpServletRequestやFilterなど、servlet-apiのクラス・インターフェースを使っているクラスが含まれる場合は、以下の手順で別のプロジェクトに切り出す。
    • servlet-apidependencyを無くす(アンリンクによる各クラスの赤×を出させる)。
    • サーブレット関係をまとめるMAVAN2プロジェクトを新規作成。
    • 元のプロジェクトでservlet-apiアンリンクになったためにコンパイルエラーになったクラス全てを新プロジェクトに移動する。
    • 新プロジェクトには、servlet-apidependencyをscope=providedで追加。
    • 新プロジェクトでアンリンクになる元プロジェクト上の依存クラスを全て移動。
    • 新しいプロジェクトでリンクエラーになるライブラリ(dependency)を元プロジェクトから新プロジェクトのPOM内に移動。
    • 旧プロジェクトのdependencyに新しいプロジェクトを追加。
    • ※※ちなみにS2Strutsを使う場合は、jarからactionやdtoを扱えるようにするために、enableJarやjarFilePatternの指定が必要。参考
  4. 元のプロジェクトの右クリックメニューから「Tomcat-Tomcatのライブラリーをプロジェクトに追加」を行う
  5. 出力ディレクトリは target/classesではなく、src/main/webapp/WEB-INF/classesにする*1
  6. 開発中クラスローダーのクラスパス(プロジェクトプロパティ-tomcat)へは、次を設定する
    • 一番下にスクロールして、org.maven.ide.eclipse.MAVEN_CLASSPATH_CONTAINERにチェック。
    • 他プロジェクトのパス(前方に集中)にチェックを入れる*2
    • ローカルリポジトリのパスはチェックを入れないこと*3
追記:servlet-api系ライブラリは target/classesのため、s2strutsのjar登録が効かなかった!

 DevLoaderへはServlet系プロジェクトへのクラスパスがあっても、s2strutsとしては、WEB-INF/classesとWEB-INF/lib/フィルタ設定したjarファイルパターンしか見ないため実際には失敗していた。しかたなくpackageビルドしたjarを置いてデバッグ。。。ダサい。

*1:tomcat pluginが、コンテントルート/WEB-INF/classesを最優先のクラスパスとして扱うため。よって、POMのproject.build.outputDirectoryにはsrc/main/webapp/WEB-INF/classesを定義しなければならない。

*2:それらもmavenプロジェクトになっているはずで、test/classesにはチェックを入れない

*3:MAVEN_CLASSPATH_CONTAINERが全て含むから