2012-11-07 32 views
7

最近まで1つのMaven WARプロジェクトまで使用していました。Tomcat MavenプラグインとマルチモジュールMavenプロジェクト

mvn tomcat:run 

我々は組み込みTomcatインスタンスの実行中にJSPファイルを変更することができましたし、変更がうまくWebブラウザに表示されます:私たちは、使用してローカルの開発者のワークステーション上でアプリケーションを実行するためのTomcat Mavenプラグインを使用していました。私は(プラグインのドキュメントから)tomcat:runゴールを使用すると、WARが動的Webアプリケーションとしてロードされるため、ソースでJSPファイルに加えられた変更は、実行時に再起動せずにTomcatによって取得されることを理解しています。

アプリケーションがかなり大きくなっているため、Webプロジェクト以外のいくつかの場所で多数のクラスを再利用する必要があったため、コードベースをマルチモジュールのMavenプロジェクトにリファクタリングしました。構造は以下のようになります。

parent Maven POM 
    | 
    ---- artifact1.jar 
    | 
    ---- artifact2.jar -> depends on artifact1.jar 
    | 
    ---- artifact3.jar -> depends on artifact1.jar 
    | 
    ---- artifact4.jar -> depends on artifact2.jar and artifact3.jar 
    | 
    ---- artifact5.war -> depends on artifact1.jar, artifact2.jar, artifact3.jar and artifact4.jar 

我々はTomcatを使用することができませんでしたリファクタリング後:プラグインとしてWARプロジェクトを実行するために、プロジェクトのルートディレクトリから実行がJARアーティファクトを検出することができませんでした。そこで、私たちはtomcat:run-war-onlyプラグインを使用するように切り替えました。 WARモジュールが正常に起動します。

しかし、ドキュメントからは、WARファイルをパッケージ化されたWebアプリケーションとして扱うようになっているようです。したがって、JSPファイルに加えた変更は、実行中に埋め込みTomcatサーバーによって取得されません。 JSPファイルを変更するたびに、サーバーを再起動する必要があります。

WARプロジェクトを動的Webアプリケーションとして実行するように設定されたこのマルチモジュールMavenには、少なくとも再起動せずにTomcatがJSPファイルの変更を取得する方法がありますか?

+0

Maven 3.xとTomcat7 Mavenプラグインでは、 'mvn -am -pl artifact5 tomcat7:run'コマンドは正常に動作します。 – manish

答えて

3

だけMVNは、最初にインストールしないと、今のApacheにあるプラグインをTomcatのの、その後

mvn -pl artifact5 tomcat:run 
+0

私はこれが解決策であることを知っています。しかし、これは有効な解決策です。私はそれを答えとして受け入れてうれしいです。私はmvn -pl artifact5 -am tomcatとしてビルドを実行する必要があります:これが動作しない場合でもインスタンスの数を減らすために実行します。 :) – manish

3

まず使用新バージョンhttp://tomcat.apache.org/maven-plugin-2.0/を参照してください。

次に、maven3を使用する場合は、上から実行するtomcat6/tomcat7:を使用します。モジュールのすべてのクラスがWebappクラスローダーに追加されます(先にすべてのjarファイルをインストールする必要はありません)。http://tomcat.apache.org/maven-plugin-2.0/run-mojo-features.html

HTH!

+0

私は最新のプラグインを試しましたが、それは役に立ちません。 : – manish

+0

問題を再現するサンプルはありますか?基本的なアーキタイプはうまく動作し、同様の使用例です –

+0

Maven 3では、他のモジュールをパッケージ化するようにmavenに指示する必要があります。 '-am package'はすべてのモジュールを明示的にパッケージ化することであり、' tomcat:run-war'はWARにのみ適用されます。 –

関連する問題