今天在整理版控的时候发现了pom中的overlays配置,记录学习如下:
overlays的使用场景:
在一个大项目中拆分maven工程时,很有可能会把js、css、jsp等文件放在不同的工程里(根据业务模块划分)。因为如果都集中在一个maven webapp里,那么这个maven webapp会太大,而且在业务上也比较分散
但是这些持有js、css、jsp的maven工程,如果packaging设置为jar是不合适的,因为外围要读取内部的这些文件就会很困难。在这种场景下,一个很自然的想法就是打成war包,然后用某种方式将多个war包归并起来,得到最终的war包 。
示例如下:
两个web工程,XXX-web和XXX-BJDXUBUIP,打包方式都是war:
XXX-web:
目录结构:
pom.xml:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.XXX.XXX</groupId>
<artifactId>XXX-Web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<finalName>XXX-Web</finalName>
</build>
</project>
XXX-BJDXUBUIP:
该工程就是打成一个war包,但是这个war是无法运行的,而是稍后用来合并的。(其中放了 一个空的web.xml,因为maven-war-plugin的package goal有强制要求)
目录结构:
pom.xml:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.XXX.XXX</groupId>
<artifactId>XXX-BJDXUBUIP</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 配置依赖 -->
<dependencies>
<dependency>
<groupId>com.XXX.XXX</groupId>
<artifactId>XXX-Web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency>
</dependencies>
<build>
<finalName>XXX</finalName>
<plugins>
<!--当目录结构发生变动,右键工程 maven->update project -->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!-- class文件会自动打JAR包 -->
<archiveClasses>false</archiveClasses>
<failOnMissingWebXml>false</failOnMissingWebXml>
<!-- 合并多个war -->
<overlays>
<overlay>
<groupId>com.XXX.XXX</groupId>
<artifactId>XXX-Web</artifactId>
</overlay>
</overlays>
</configuration>
</plugin>
</plugins>
</build>
</project>
注意:
1、XXX-BJDXUBUIP自身的packaging类型也是war ;
2、在<overlay>
中配置要归并的webapp的groupId和artifactId,注意的是,该pom所在的webapp工程是主工程,会覆盖掉所有待归并工程的同名文件,包括web.xml ;
3、要归并的webapp,必须声明为依赖 ;
归并后的项目目录结构如下:
其中的文件和都是由2个war包归并得到的,XXX-BJDXUBUIP是主war包,如果多个war包中存在重名文件,则会被XXX-BJDXUBUIP的文件覆盖,比如web.xml。