我有一个多模块的Web应用程序。
结构是:
Parent
|
| - - Child 1
| - - Child 2
| - - Web
Web项目取决于两个子模块
当使用我的IDE构建我的项目时,我习惯于在IDE-INF / classes文件夹中构建类。这很好,因为Web服务器注意到新类并重新启动或热部署这些文件。对于maven,我似乎每次都要从头开始包装整件事。
我想在maven中找到一种方法,以便我可以避免运行mvn:clean mvn:install mvn:war:inplace。相反,我想要一个mvn:comile,然后就是那里的东西。
我希望你理解我的意思。当您需要构建所有项目jar并在更新内容之前运行som war命令时,测试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>
答案 0 :(得分:2)
您的问题的一个可能的解决方案可能是使用maven-war-plugin构建skinny war(或者如果您还有其他依赖项,至少排除child1和child2)并添加目标/类文件夹子项目到你的类路径。这可以通过Build Helper Maven Plugin's add-resource
goal完成。
免责声明:我自己没有尝试过,但理论上它可以起作用:)
答案 1 :(得分: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>
现在每次我进行编译都会看到码头,这比安装,战争和以前需要的东西要快得多。