2013-08-18 10 views
8

私はマルチモジュールWebアプリケーションを持っています。MavenマルチモジュールWebアプリケーション(ホットスワップ)

構造は次のとおりです。

Parent 
| 
| - - Child 1 
| - - Child 2 
| - - Web 

とWebプロジェクトは2つのモジュールに依存して自分のプロジェクトをビルドするために私のIDEを使用している場合

私はWEB-内のクラスを構築するIDEに使用されましたINF/classesフォルダにあります。これは、Webサーバーが新しいクラスに気付き、これらのファイルを再起動したり、ホットデプロイしたりするのに便利でした。 Mavenを使用すると、毎回全部をゼロからパッケージ化しなければならないようです。

mvn:clean mvn:install mvn:war:inplaceを実行しないように、私はmavenで方法を見つけたいと思います。代わりに、私はmvn:喜んで、そしてちょうどそこにものをしたいです。

私はあなたが何を意味するかを理解していただきたいと思います。すべてのプロジェクトjarをビルドしてsom warコマンドを実行してから更新する必要がある場合、Webアプリケーションのテストは非常に遅いです。

Webアプリケーションは、POM:これは、この問題への私自身の一時的な答えです

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     ... 
    </parent> 

    <artifactId>web</artifactId> 
    <packaging>war</packaging> 

    <dependencies> 
     <dependency> 
     <groupId>bla.bla.bla</groupId> 
     <artifactId>bla_child1</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
     <groupId>bla.bla.bla</groupId> 
     <artifactId>bla_child2</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.4</version> 
     </plugin> 
     <plugin> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>9.0.4.v20130625</version> 
      <configuration> 
       <scanIntervalSeconds>30</scanIntervalSeconds> 
       <webApp> 
        <contextPath>/blabla</contextPath> 
       </webApp> 
      </configuration> 
     </plugin> 
     </plugins> 
    </build> 
</project> 
+0

あなたはどのようなIDEを使用していますか? Eclipseのように、[m2e](http://eclipse.org/m2e/)や[WTP](http://projects.eclipse.org/projects/webtools)のようなプラグインを使って、mavenとwebappsをうまくサポートしている人もいます。 –

+0

IntelliJ。それはIDEでのサポートの欠如ではありませんが、私はそれが完全にmavenで行うことができると思います。 – AnAmuser

+3

[maven jetty plugin](http://maven.apache.org/plugins/maven-war-plugin/examples/rapid-testing-jetty6-plugin.html)はニーズに合っていませんか? 'mvn compile'の後に更新された' target/classes'をピックアップしていませんか? –

答えて

1

これはmavenで行うことができたらうれしいですが、私は解決策を見つけることができませんでした。したがって、私はantターゲットをWebモジュールのコンパイル・フェーズにバインドしました。

これはおそらくどこでも使用できる解決策ではありませんが、私の場合は機能します。

ウェブ/のpom.xml:

  <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.7</version> 
      <executions> 
       <execution> 
        <id>copy-modules</id> 
        <phase>compile</phase> 
        <configuration> 
        <target> 
         <delete dir="${project.basedir}\src\main\webapp\WEB-INF\classes"/> 
         <copy todir="${project.basedir}\src\main\webapp\WEB-INF\classes"> 
          <fileset dir="${main.basedir}\modules\child-1\target\classes"> 
           <include name="**/*.class"/> 
           <include name="**/*.xml"/> 
          </fileset> 
          <fileset dir="${main.basedir}\modules\child-2\target\classes"> 
           <include name="**/*.class"/> 
           <include name="**/*.xml"/> 
          </fileset> 
         </copy> 
        </target> 
        </configuration> 
        <goals> 
        <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

は今、桟橋は、私は、戦争と前に必要だったものをインストールするよりもはるかに高速でコンパイルし、実行するたびに見ています。

+0

この方法の問題は、コピーされるクラスに新しい依存関係が導入された場合、それを(いくつかの共有された)libフォルダにコピーしないことです。その場合、アプリケーションはClassNotFoundExceptionで中断します。私は私の答えを削除したので、ここに[このスクリプトのmavenポートへのペーストビンのリンク](http://pastebin.com/CmRPyd8F) – linski

2

他の依存関係がある場合は、をmaven-war-plugin(または少なくともchild1とchild2を除外します)で構築し、子/あなたのクラスパスにプロジェクト。これはBuild Helper Maven Plugin's add-resource goalで行うことができます。

免責事項:私はこれを自分で試していないが、理論的には、それは仕事ができる:)

+2

私はそれを試して、桟橋を再起動せずに動作しません。 Jettyは、WARモジュールのターゲット/クラス以外のクラスパスの変更をスキャンしていないようです。 –

+1

ここをクリック[how](http://stackoverflow.com/a/2389464/679982)、upvoted。 – linski

関連する問題