一、业务场景
传统的SSM项目一般都为war包部署,多模块的项目一般都是将模块打包成jar包依赖进web工程中,但是对于作为基础项目或者分模块的web项目来说,打成war包对静态资源的访问就不太方便;这里介绍一下通过Maven WAR Plugin的解决这个问题。这对于没有上微服务的项目来说应该是个不错的解决方案,将通用的常规化的功能抽到base.war中,而其他类似项目依赖base.war作为基础项目的一个模块并对其做小部分定制化的修改即可,大大提高了同类型项目的交付周期。
二、overlay简介
Overlays(覆盖)主要用于跨多Web项目间共享公共资源。它能够在目标WAR本身覆盖除了原生WAR构件以外的所有文件,并在WEB-INF/lib目录下收集原生WAR项目的依赖。
元素包含有下列子元素:
id - overlay id。如果你不提供的话,WAR插件将自动生成一个。
groupId - 配置你想要覆盖的groupId。
artifactId – 配置你想要覆盖的构件的artifactId。
type – 配置你想要覆盖的构件类型。默认值是:war。
classifier – 如果有多个构件匹配当前的groupId/artifactId,那么你需要配置构件的classifier以明确覆盖(classifier:该元素用来帮助定义构建输出的一些附属构件)。
includes - 要包含的文件。默认情况下,所有文件都能被包含。
excludes – 要排除的文件。默认情况下,在META – INF目录是被排除在外的。
targetPath - 在webapp结构的目标相对路径,当然这只在覆盖类型为war时才有效。默认情况下,覆盖的内容都追加在webapp的根节点下。
skip – 当设置为true时,跳过本次覆盖。默认值是:false。
#三、实现方式
基础项目:base.war,具体开发项目:a.war
如果在a项目中没有对base项目种具体方法的引用,则只需要在a项目中添加下面的build节点。
<build>
<finalName>a</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</</