这只需要对 maven jar & war 插件进行一些高级使用。
第一个具有 Java 类和一些 WEB-INF/工件的
假设这代表了主要的战争。您只需使用 maven-war-plugin 的 Overlays 功能。最基本的方法是指定战争依赖:
<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 类型依赖项(它将是一个 JAR in WEB-INF/lib/
)
<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 个依赖项......为了使其工作,您必须在第三个工件(战争类型工件)中设置 jar 插件,关于分类器和事实您需要来自一个工件(war & 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>