9

マルチモジュール Web アプリケーションがあります。

構造は次のとおりです。

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

そして、Web プロジェクトは 2 つの子モジュールに依存します

IDE を使用してプロジェクトをビルドするとき、IDE が WEB-INF/classes フォルダーにクラスをビルドすることに慣れていました。Web サーバーが新しいクラスに気づき、これらのファイルを再起動またはホット デプロイしたため、これは良かったです。Maven を使用すると、毎回最初からすべてをパッケージ化する必要があるようです。

mvn:clean mvn:install mvn:war:inplace の実行を回避できるように、Maven で方法を見つけたいと思います。代わりに、mvn:comile が欲しいです。

私の言いたいことを理解していただければ幸いです。常にすべてのプロジェクト jar をビルドし、更新前に som war コマンドを実行する必要がある場合、Web アプリのテストは非常に遅くなります。

Web アプリのポン:

<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>
4

2 に答える 2

3

問題の解決策として、maven-war-plugin を使用してスキニー ウォーを構築し(または、他の依存関係がある場合は、少なくとも child1 と child2 を除外します)、子プロジェクトの target/classes フォルダーをクラスパス。これはBuild Helper Maven Plugin のadd-resourcegoalで実行できます。

免責事項:私はこれを自分で試していませんが、理論的にはうまくいく可能性があります:)

于 2013-08-29T07:05:29.703 に答える
1

これは、この問題に対する私自身の一時的な回答です。

mavenでできればいいのですが、解決策が見つかりません。したがって、Ant ターゲットを Web モジュールのコンパイル フェーズにバインドしました。

これはおそらくどこでも使用できるソリューションではありませんが、私の場合は機能します。

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>

これで、以前必要だったインストール、戦争、およびその他のものよりもはるかに高速なコンパイルを行うたびに、桟橋が認識されます。

于 2013-08-25T12:38:53.530 に答える