9

我有一个多模块 Web 应用程序。

结构是:

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

而web项目依赖于两个子模块

在使用 IDE 构建项目时,我习惯于 IDE 在 WEB-INF/classes 文件夹中构建类。这很好,因为 Web 服务器注意到了新类并重新启动或热部署了这些文件。使用 maven 似乎我每次都必须从头开始打包整个东西。

我想在 maven 中找到一种方法,这样我就可以避免运行 mvn:clean mvn:install mvn:war:inplace。相反,我想要一个 mvn:comile,然后是那里的东西。

我希望你明白我的意思。当您总是必须在更新之前构建所有项目 jar 并运行 som war 命令时,测试 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>
4

2 回答 2

3

解决您的问题的一个可能方法是使用 maven-war-plugin 构建一场瘦身战争(或者如果您还有其他依赖项,至少排除 child1 和 child2)并将子项目的目标/类文件夹添加到您的类路径。这可以通过Build Helper Maven 插件的add-resource目标来完成。

免责声明:我自己没有尝试过,但理论上它可以工作:)

于 2013-08-29T07:05:29.703 回答
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>

现在码头看到我每次编译,这比安装、战争和以前需要的东西要快得多。

于 2013-08-25T12:38:53.530 回答