Maven War plugin提供了overlays功能,overlays提供了多个web应用程序共享资源的途径。通过overlays,可以通过包依赖实现个性化定制开发,而不是直接在已有成熟软件的源码下进行个性化定制开发。

overlays 样例

假设当前正在构建的项目documentedproject有如下结构

 |-- pom.xml`-- src`-- main|-- java|   `-- com|       `-- example|           `-- projects|               `-- SampleAction.java|-- resources|   |-- images|   |   `-- sampleimage.jpg|   `-- sampleresource`-- webapp|-- WEB-INF|   `-- web.xml|-- index.jsp`-- jsp`-- websource.jsp

该项目依赖于另一个war包documentedprojectdependency-1.0-SNAPSHOT.war

 ...<dependencies><dependency><groupId>com.example.projects</groupId><artifactId>documentedprojectdependency</artifactId><version>1.0-SNAPSHOT</version><type>war</type><scope>runtime</scope></dependency>...</dependencies>...

该war包依赖有如下结构

documentedprojectdependency-1.0-SNAPSHOT.war|-- META-INF|   |-- MANIFEST.MF|   `-- maven|       `-- com.example.projects|           `-- documentedprojectdependency|               |-- pom.properties|               `-- pom.xml|-- WEB-INF|   |-- classes|   |   |-- com|   |   |   `-- example|   |   |       `-- projects|   |   |           `-- SampleActionDependency.class|   |   `-- images|   |       `-- sampleimage-dependency.jpg|   `-- web.xml`-- index-dependency.jsp

当前构建的项目documentedproject最后生成的war包将会有如下结构

|-- META-INF|   |-- MANIFEST.MF|   `-- maven|       `-- com.example.projects|           `-- documentedproject|               |-- pom.properties|               `-- pom.xml|-- WEB-INF|   |-- classes|   |   |-- com|   |   |   `-- example|   |   |       `-- projects|   |   |           |-- SampleAction.class|   |   |           `-- SampleActionDependency.class|   |   `-- images|   |       |-- sampleimage-dependency.jpg|   |       `-- sampleimage.jpg|   `-- web.xml|-- index-dependency.jsp|-- index.jsp`-- jsp`-- websource.jsp

web.xml来源于当前构建项目documentedproject。

overlays 配置

war plugin提供了一些overlays的配置项用于自定义,常用的include/exclude选项可以用于配置吸纳/排除包中指定的文件。
如下的配置从documentedprojectdependency.war overlay中排除了sampleimage-dependency.jpg

...<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><overlays><overlay><groupId>com.example.projects</groupId><artifactId>documentedprojectdependency</artifactId><excludes><exclude>WEB-INF/classes/images/sampleimage-dependency.jpg</exclude></excludes></overlay></overlays></configuration></plugin></plugins></build>...

overlays 打包

overlays打包过程遵循first-win策略,如果一个文件已经从一个overlay中得到拷贝,接下来的overlay中的同名文件将不会再被拷贝。overlays按它们在<overlays>中声明的顺序被应用,如果没有该配置,则按照依赖声明的顺序被应用,该方法具有不可靠性,尤其是在有传递性依赖存在的情况。在混合有配置和无配置的情况下,无配置的overlays在有配置的overlays之后被应用。

默认情况下,当前构建的项目的资源在任何其他overlay之前被应用,当前构建项目被作为一个特殊的overlay被对待,其没有groudId和artifactId。如果需要改变这个默认,可以配置当前构建项目在其他overlay之后被应用。

  ...<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><overlays><overlay><groupId>com.example.projects</groupId><artifactId>my-webapp</artifactId></overlay><overlay><!-- empty groupId/artifactId represents the current build --></overlay></overlays></configuration></plugin></plugins></build>...

overlays可以结合不同的include/exclude被配置多次以提供更加细粒度的控制。

...<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><overlays><overlay><id>my-webapp-index.jsp</id><groupId>com.example.projects</groupId><artifactId>my-webapp</artifactId><includes><include>index.jsp</include></includes></overlay><overlay><!-- empty groupId/artifactId represents the current build --></overlay><!-- Other overlays here if necessary --><overlay><id>my-webapp</id><groupId>com.example.projects</groupId><artifactId>my-webapp</artifactId></overlay></overlays></configuration></plugin></plugins></build>...

my-webapp包中index.jsp文件首先被配置优先于当前构建项目被使用,而同一个war包中的其他文件则在当前构建项目之后被应用。

利用Maven的War Overlays实现War包资源共享相关推荐

  1. 使用maven打war包时报[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war...

    起因: maven项目中放置web.xml文件的资源文件夹写成了webapps 分析: maven的web项目默认是在src\main\webapp.如果在此目录下找不到web.xml就抛出该异常. ...

  2. MAVEN利用Profile构建不同环境的部署包

    通常,项目要在多个环境部署,每种环境都有各自的资源配置参数,比如:数据库连接.Redis服务器地址等等. 所以,各个环境打包出来的资源是不一样的,如果手动的修改,费时费力.我们可以利用MAVAN的pr ...

  3. Maven多模块打包成war+vue打包

    Maven多模块打包成war+vue打包 Maven多模块打包成war 示例 对于这样的工程, 1.需要将总的maven工程进行pom打包 <groupId>**</groupId& ...

  4. 【工欲善其事必先利其器·单点登录】使用CAS WAR Overlays部署CAS

    CAS WAR Overlays是CAS官网最为推荐的安装部署方式,为何最为推荐,可阅读<CAS 部署建议>了解.本篇文章详细介绍CAS WAR Overlays部署步骤. 一.安装JDK ...

  5. 【maven install报错】Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war

    maven install报错如下: [INFO] Scanning for projects... [INFO] Downloading: http://xxx.xx.xx.x:xxxx/nexus ...

  6. 使用idea进行Maven打包异常:Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war

    使用idea进行Maven打包异常:Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war 参考文章: (1) ...

  7. Linux下打包压缩war和解压war包

    因为种种原因公司需要把java程序达成war包.起先用zip命令打包,起先可以用,后来却无法使用.今天找到一个更好的办法.用jar命令,前提是要安装dk. 把当前目录下的所有文件打包成game.war ...

  8. Linux下打包压缩war和解压war包 zip和jar

    ============jar================= 把当前目录下的所有文件打包成game.war jar -cvfM0 game.war ./ -c   创建war包 -v   显示过程 ...

  9. 利用MAVEN打包时,如何包含更多的资源文件

    首先,来看下MAVENx项目标准的目录结构: 一般情况下,我们用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面,利用maven打包时,ma ...

最新文章

  1. java基础面试题整理-2021
  2. JQ中$(window).load和$(document).ready()使用,区别与执行顺序
  3. qcom Android Camera【转】
  4. c++ vector clear()清除容器中所有数据
  5. 鼠标滑过,解决ul下 li下a的背景与父级Li不同宽的问题
  6. Java黑皮书课后题第7章:*7.20(修改选择排序法)在7.11节中,使用了选择排序法对数组排序。改写7.11节程序,重复地在当前数组中找到最大值,然后将这个最大值与该数组中的最后一个数进行交换
  7. python之路----验证客户端合法性
  8. Main execution in Scala - Scala应用的入口
  9. vga焊接线顺序_焊接工艺问答,不做焊接也要收藏起来
  10. 整理的几个常用的数据库维护的脚本
  11. 实现Windows访问Linux文件系统
  12. SQL server 表中如何创建索引?
  13. 【语音合成】基于matlab重叠相加法的信号分帧与还原【含Matlab源码 568期】
  14. 20181120 复习菜鸟教程中的node.js
  15. 小米蓝牙广播数据解析(MiBeacon)
  16. 微软官方精简Windows7系统——Windows Thin PC的安装过程
  17. android设置自动亮度,Android亮度调节的几种实现方法
  18. postgresql-9.5.5数据库安装教程
  19. Swift 函数的定义及调用
  20. java如何设置jlabel位置_Java Swing – JLabel位置

热门文章

  1. OpenCV学习篇2:viz模块简单用法
  2. 如何在微信直接下载APP(iOS/Android)的解决方案
  3. HDOJ 5620-KK's Steel【斐波那契数列】
  4. 成都计算机专业考研难度排名,成都计算机考研难度排行榜
  5. OAuth协议(三方登录授权)
  6. python中ifelse语句怎么写_pythonifelse语句怎么写
  7. XXO客户端携带WUP包体进行协议测试
  8. 游戏创业团队应该选择Git还是Svn
  9. 2022暑初二信息竞赛学习成果分享2
  10. 新站上线完整详细的SEO优化方案