类似问题here。
我想从3个不同的maven模块部署一个结果WAR。战争模块绝对没有冲突:
第一个拥有Java类和一些WEB-INF /工件
第二个只是API - 接口 - 必须已经存在于容器中或部分战争中(这就是我想要的)
第三个包含实现类,WEB-INF /工件(spring infrastructure,web.xml等)
首先取决于接口和实现。第三个取决于接口。
我在可能的选择上一团糟。
我是否使用Overlays?
或者我是否使用程序集插件来集成第二个类?
我是否使用Cargo plugin?
如果我从不同的模块指定webResources,它是否由maven-war-plugin完成?因为this dude和我几乎一样,但只有2个war模块,并且他不使用程序集插件,也不使用Overlays ....
请告诉我,这是怎么做到的?
答案 0 :(得分:7)
这只需要稍微高级的使用maven jar&战争插件。
第一个拥有Java类和一些WEB-INF / artifacts
让我们说这代表了主要的战争。你只需使用maven-war-plugin的叠加功能。最基本的方法是指定战争依赖:
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-service-impl</artifactId>
<version>${version}</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
并告诉maven war插件将此依赖关系的资产合并到主战争中(我们现在所在的位置)
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<dependentWarExcludes>WEB-INF/web.xml,**/**.class</dependentWarExcludes>
<webResources>
<resource>
<!-- change if necessary -->
<directory>src/main/webapp/WEB-INF</directory>
<filtering>true</filtering>
<targetPath>WEB-INF</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
您还在第二个上包含jar类型依赖项(它将是WEB-INF/lib/
中的JAR)
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-service</artifactId>
<version>${version}</version>
<type>jar</type>
</dependency>
您还需要指定对第三个WAR的类的依赖:
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-service-impl</artifactId>
<version>${version}</version>
<classifier>classes</classifier>
<type>jar</type>
</dependency>
分类器的注意事项,它是必要的,因为你指定了同一个工件的2个依赖项...为了使它工作,你必须在第三个工件(war类型工件)中设置jar插件,关于分类器和事实上你需要一个工件(war&amp; jar)中的2个包:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<!-- jar goal must be attached to package phase because this artifact is WAR and we need additional package -->
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<!--
classifier must be specified because we specify 2 artifactId dependencies in Portlet module, they differ in type jar/war, but maven requires classifier in this case
-->
<classifier>classes</classifier>
<includes>
<include>**/**.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>