Maven的overlay插件的用法

2023-05-16

Maven的overlay插件的用法【结合cas4.0.3】

 

本文链接:https://blog.csdn.net/qq_24874939/article/details/84534854

版权

overlay插件是用户多个web项目的war包合并,被依赖的war包会根据pom中的配置以及主项目的现有文件进行合并。用途:1.大型web项目的并行开发。在分布式的趋势下,这个用途应该不多了。2.基于他人项目的修改,比如:cas本身用来做登陆权限的中央认证,其中项目源码非常之多,但本身必须是一个持续运行在服务器上的web项目,对于开发者而言只是需要在cas代码上根据业务做一些修改,涉及到的文件可能只有三四个,而其他多余的东西完全用不到,这就会导致项目看起来十分累赘、冗余。时间一久也忘了几十上百个文件中到底修改了那些。
而使用overlay插件的好处在于:1.项目看起来更加清爽。2.因为项目中的已有的文件就是自己定义的文件,即使是后面接手的人,也一目了然、便于维护。3.提高开发效率,若用传统方式需要提取所以文件到项目,一旦漏掉哪个就会导致报错,编写代码也不会因为代码文件太多太庞大,导致编译工具卡顿,最终运行的版本会在项目运行时先合并再编译运行。

以cas4.0.3为例,左边传统方式,右边使用overlay插件

在这里插入图片描述
可以看出项目立即变得清爽,需要自定义什么内容,只需要在项目中创建对应目录结构下的同名文件即可。

overlay插件的用法

1.首先创建一个干净清爽的maven webapp项目
在这里插入图片描述

2.打开pom文件加入overlay的插件

	<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.2</version>
        <configuration>
          <overlays>
            <overlay>
              <groupId>org.jasig.cas</groupId>
              <artifactId>cas-server-webapp</artifactId>
            </overlay>
          </overlays>
        </configuration>
     </plugin>

其中<overlays>标签下可以加入多个<overlay>也就是支持多个war包的合并,填写时只需写入<groupId><artifactId>不需要版本号。

3.将overlay里面的war包依赖加入到dependencies中:

dependency>
      <groupId>org.jasig.cas</groupId>
      <artifactId>cas-server-webapp</artifactId>
      <version>4.0.3</version>
        <type>war</type>
        <!--<scope>runtime</scope>-->
    </dependency>

scope写不写都一样,因为在编写代码时候,获取不到war中的jar包依赖。

4.此时项目中会多一个overlay的文件:
在这里插入图片描述
需要修改什么内容,则参照overlay里面的结构去创建同样的目录和文件即可,这里需要将overlay里面的web.xml文件复制到主项目中,因为合并后的内容都是以主项目的文件为准,而web.xml是整个webapp的核心配置文件,因此在无法被覆盖的前提下,要保证主项目的web.xml包含了所有overlay项目中的web.xml的启动配置环境,如各种filter和spring的配置文件的扫描路径是通用的

5.将web.xml提取到主项目中替换后,即可直接在tomcat中启动起来
在这里插入图片描述
同时关注到项目运行时,生成的target文件:
在这里插入图片描述
发现overlay下面的文件都最终合并在主项目中。

6.自定义一个登陆界面
cas4.0中直接替换WEB-INF/view/jsp/default/ui/casLoginView.jsp即可完成对登陆界面的修改。
先创建一个同目录下的同名文件:
在这里插入图片描述
然后启动项目测试:
在这里插入图片描述
发现界面直接变成了自定义的,同时观察生成的target文件:
在这里插入图片描述
发现此时的casLoginView.jsp自动变成了自定义的。

7.includesexcludes的用法
打开生成的target文件:
在这里插入图片描述
发现unused-spring-configuration文件下的东西完全不需要的,此时在pom的<overlay>下做如下修改:

<overlays>
   <overlay>
     <groupId>org.jasig.cas</groupId>
     <artifactId>cas-server-webapp</artifactId>
     <excludes>
     <exclude>WEB-INF/unused-spring-configuration/**</exclude>
     </excludes>
   </overlay>
 </overlays>

然后将target删除后,再启动项目:
在这里插入图片描述
发现被exclude匹配的文件直接消失。
总结:<overlay>下的<exclude>下匹配的文件不会出现在最终合并target中,也就是启动环境中去。这个可以用于一些主项目用不到的资源文件可以用exclude直接移除掉。
那么对应的include则代表只将include中匹配的文件合并到主项目中去。同样的来做个测试:

  • 这次只加载overlay中的jsp进来:
    pom:
	<overlay>
              <groupId>org.jasig.cas</groupId>
              <artifactId>cas-server-webapp</artifactId>
              <includes>
              <include>WEB-INF/view/jsp/**</include>
              </includes>
    </overlay>
  • 删除target文件,运行后发现:
    在这里插入图片描述
    这次只有jsp文件被合并了进来。
    总结:<overlay>下若有<include>的配置,则最终合并的文件只包含include下匹配的文件
    include用于让开发者去灵活选择overlay中只需要用到的资源。

8.dependentWarIncludesdependentWarExcludes这两个和includeexclude用法一致,前者配置只合并的文件,后者配置不合并的文件。那么和includeexclude的区别是啥呢?
先看pom用法:

 <configuration>
          <overlays>
            <overlay>
              <groupId>org.jasig.cas</groupId>
              <artifactId>cas-server-webapp</artifactId>
              <includes>
              <include>WEB-INF/view/jsp/**</include>
              </includes>
            </overlay>
          </overlays>
          <!--<dependentWarIncludes>WEB-INF/web.xml</dependentWarIncludes>-->
          <dependentWarIncludes>WEB-INF/**</dependentWarIncludes>
          <dependentWarExcludes>WEB-INF/view/jsp/default/ui/casLogoutView.jsp</dependentWarExcludes>
</configuration>

可以看到用法是直接写在configuration节点下,也就是说,这个配置对所有overlay都起作用,前提是<overlay>下没有<include><exclude>,也就是说<dependentWarIncludes><dependentWarExcludes>是全局作用,每个<overlay>下的war包都会被应用到该配置,但是优先级要低于<include><exclude>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven的overlay插件的用法 的相关文章

随机推荐

  • Ubuntu 中apt update和upgrade 的区别

    转自https blog csdn net csdn duomaomao article details 77802673 简要说明 xff1a apt update xff1a 只检查 xff0c 不更新 xff08 已安装的软件包是否有
  • ubuntu下域名解析出问题的解决办法

    内网服务器配置了固定ip xff0c 未配置dns xff0c 临时需要接入外网时 xff0c 域名解析失败 xff0c 需要临时添加域名解析 操作如下 xff1a sudo vim etc resolv conf 然后底下插入你的好用的d
  • Git clone wiringPi出现Connection reset by peer的解决办法

    Git clone wiringPi出现Connection reset by peer的解决办法 小伙伴们按照正常的方法来安装强大的GPIO库wiringPi一般为如下几步 xff1a git span class hljs keywor
  • Linux内存占用过高?非也

    前言 今天在我的RPi2上测试GPIO程序 xff0c 忽然发现机器超卡 xff0c 重启之后依然如此 于是我top了一下发现了一个问题就是内存爆满 xff01 xff01 可我还啥都没干呢这是咋了 xff1f 于是我呵呵地开始查资料 xf
  • MPC控制笔记(一)

    转自 我的博客 笔记参考1 xff1a Understanding Model Predictive Control Youtube 带自动生成字幕 笔记参考2 xff1a Understanding Model Predictive Co
  • [强化学习笔记专题(二)]Nature DQN

    转自 我的博客 DQN Nature 一 算法流程 xff1a 定义可配置参数 episode 数量 M最大仿真时间 T xff0c g r
  • [强化学习论文] (HDQN) Integrating Temporal Abstraction and Intrinsic Motivation

    转自我的博客 论文 题目 Hierarchical Deep Reinforcement Learning Integrating Temporal Abstraction and Intrinsic Motivation 作者 Tejas
  • 强化学习专题笔记(一) 强化学习基础

    一 长期回报 对于问题的简化 xff0c 采用理想的MDP xff0c 简化问题到具有马尔科夫性 xff0c 对于马尔科夫决策过程而言 xff0c 在理想状态下 xff0c 每一个行动都要为最终的目标最大化长期回报 而努力 max t
  • [马士兵] 一. 初识JAVA 10.notepad++的安装_配置系统环境变量path

    1 安装记事本 xff1a notepad 2 安装 xff1a 一直下一步 3 打开记事本进行设置 xff1a 设置 首选项 xff1a 设置 语言格式设置 xff1a 4 打开notepad 43 43 xff08 1 xff09 方式
  • MPC控制笔记(一)

    转自 我的博客 笔记参考1 xff1a Understanding Model Predictive Control Youtube 带自动生成字幕 笔记参考2 xff1a Understanding Model Predictive Co
  • 【简单数学概念】为什么傅里叶变换能把时域变为频域?

    一 定义 频率 xff1a 在1秒时间内 xff0c 完成相同变化的次数 周期 xff1a 完成1次变化所消耗的时间 两者的关系为 xff1a 频率 61 1 周期 时域 xff1a 描述数学函数或物理信号对时间的关系 xff08 横轴是时
  • 一文彻底搞懂嵌入式中UART、RS232、RS485、CAN协议

    一文彻底搞懂嵌入式中UART RS232 RS485 CAN协议 之前分享过一些使用UART RS232 RS485 CAN协议进行传感器数据读取 伺服电机控制的文章 xff0c 但这些协议之间到底有什么不同 xff0c 工作原理又到底是什
  • ROS回调函数传参

    一 回调函数仅含单个参数 C 43 43 代码 void chatterCallback const std msgs String ConstPtr amp msg ROS INFO 34 I heard s 34 msg gt data
  • eclipse更改tomcat部署路径

    eclipse中默认的项目部署路径是在项目的路径 xff0c 不像myeclipse那样部署后项目在Tomcat的安装路径webapps下 这样虽然可以运行 xff0c 但是不方便开发和调试 xff0c 本文将介绍如何改变eclipse中T
  • OpenStack Neutron 对接OVN 使用 networking-ovn

    OVN是OVS的控制平面 xff0c 它给 OVS 增加了对虚拟网络的原生支持 xff0c 大大提高了 OVS 在实际应用环境中的性能和规模 使用neutron 配置mechanism drivers 为OVN时 xff0c 会有以下优点
  • Openstack Neutron 集成 SDN控制器

    Neutron 集成SDN控制器 一 xff0e Neutron的组成元素 Neutron server 可以理解为一个专门用来接收Neutron REST API 调用的服务器 xff0c 然后负责将不同的REST API分发到不同的ne
  • OpenStack云平台网络模式(flat\flatdhcp\vlan)及其工作机制

    网络 xff0c 是OpenStack的部署中最容易出问题的 xff0c 也是其结构中难以理清的部分 经常收到关于 OneStack部署网络方面问题和OpenStack网络结构问题的邮件 下面根据自己的理解 xff0c 谈一谈OpenSta
  • Openstack卷迁移状态图

  • OpenStack 存储热迁移

    随着存储技术的不断发展 xff0c 云计算中的存储后端种类越来越多 而在不同存储后端之间进行存储热迁移则是和普遍的需求 在 OpenStack 中 xff0c 云硬盘 xff08 volume xff09 支持在不同后端之间进行数据移 具体
  • Maven的overlay插件的用法

    Maven的overlay插件的用法 结合cas4 0 3 本文链接 xff1a https blog csdn net qq 24874939 article details 84534854 版权 overlay插件是用户多个web项目