但是這些持有js、css、jsp的maven工程,如果packaging設置爲jar是不合適的,因爲外圍要讀取內部的這些文件就會很困難。在這種場景下,一個很自然的想法就是打成war包,然後用某種方式將多個war包歸併起來,得到最終的war包
這就是overlays發揮作用的地方
以下舉一個例子:
這裏有2個web工程,一個是task-sla-web,一個是task-web-dist,packaging類型都是war,目錄結構如下:
下面是task-sla-web的pom文件:
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.huawei.inoc.wfm.task</groupId>
- <artifactId>task-sla-web</artifactId>
- <packaging>war</packaging>
- <version>0.0.1-SNAPSHOT</version>
- <name>task-sla-web</name>
該工程就是打成一個war包,但是這個war是無法運行的,而是稍後用來合併的。(其中放了 一個空的web.xml,因爲maven-war-plugin的package goal有強制要求)
下面是task-web-dist的pom文件:
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.huawei.inoc.wfm.task</groupId>
- <artifactId>task-web-dist</artifactId>
- <packaging>war</packaging>
- <version>0.0.1-SNAPSHOT</version>
- <name>task-web-dist</name>
- <!-- 合併多個war -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <version>2.1.1</version>
- <configuration>
- <overlays>
- <overlay>
- <groupId>com.huawei.inoc.wfm.task</groupId>
- <artifactId>task-sla-web</artifactId>
- </overlay>
- </overlays>
- </configuration>
- </plugin>
- <!-- 配置依賴 -->
- <dependencies>
- <dependency>
- <groupId>com.huawei.inoc.wfm.task</groupId>
- <artifactId>task-sla-web</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <type>war</type>
- </dependency>
- </dependencies>
以上片段主要要注意幾點:
1、task-web-dist自身的packaging類型也是war
2、在<overlay>中配置要歸併的webapp的groupId和artifactId,注意的是,該pom所在的webapp工程是主工程,會覆蓋掉所有待歸併工程的同名文件,包括web.xml
3、要歸併的webapp,必須聲明爲依賴
歸併後的最終war包如下:
其中的文件和.class都是由2個war包歸併得到的,task-web-dist是主war包,如果多個war包中存在重名文件,則會被task-web-dist的文件覆蓋,比如web.xml