动态切换 Spring Boot 打包配置:使用 Maven Profiles 管理 JAR 和 WAR
引言
在多环境开发中,我们经常需要根据部署环境来改变 Spring Boot 应用的打包方式。本文将探讨如何使用 Maven Profiles 结合依赖排除来动态地切换 JAR 和 WAR 打包配置。
1. 修改 pom.xml 以支持 WAR 包
转换 Spring Boot 应用从 JAR 到 WAR 时,首先需要在 pom.xml 中进行一些基本调整:
-
修改 Spring Boot Starter:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- WAR profile 中将添加 exclusion --> </dependency> -
配置 Maven 插件:
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins> </build>
2.添加 Servlet 初始化器
为了让 Spring Boot 应用作为 WAR 包运行,需要提供一个 SpringBootServletInitializer 的子类。这个类将帮助 Spring Boot 启动并连接到 Servlet 容器。在你的项目中添加一个新的类,如下所示:
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;public class ServletInitializer extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(YourApplication.class);}}
在上面的代码中,YourApplication 应该替换为你的主 Spring Boot 应用类的名字。
3. 定义 Maven Profiles
定义不同的 profiles,每个针对特定的打包需求:
<profiles><profile><id>jar</id><!-- 默认激活 jar 打包模式 --><activation><activeByDefault>true</activeByDefault></activation><properties><packaging.type>jar</packaging.type></properties></profile><profile><id>war</id><properties><packaging.type>war</packaging.type></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency></dependencies></profile>
</profiles>
在 war 中,将 spring-boot-starter-tomcat 依赖的作用域设置为 provided 意味着在打包应用时,这个依赖不会被包含在 WAR 文件中。这是因为在 WAR 文件部署到外部容器(如 Tomcat)时,容器将提供 Tomcat 的实现。
排除
spring-boot-starter-tomcat依赖另一种方法是完全排除
spring-boot-starter-tomcat依赖。这在你不想在开发环境中使用嵌入式 Tomcat 服务器时很有用。在这种情况下,你的应用将完全依赖于外部容器来提供 Tomcat 的功能。这通常在pom.xml中通过依赖排除来实现:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions> </dependency>选择哪种方法
- 如果你想在开发和测试阶段使用嵌入式 Tomcat,但在生产中使用外部容器,则使用
provided作用域是更好的选择。- 如果你打算在所有环境中都使用外部容器,并且不希望在应用中包含嵌入式 Tomcat,则应选择排除依赖的方法。
3. 配置项目打包方式
使用 <packaging> 元素依据激活的 profile 设置打包类型:
<packaging>${packaging.type}</packaging>
4. 构建项目
通过命令行激活特定的 profile 进行构建:
- JAR 包:
mvn clean package -Pjar - WAR 包:
mvn clean package -P war,prod
在 Maven 命令中使用
-P选项时,它可以紧跟着 profile 名称,也可以与之用空格分开。两种方式在功能上是等效的,选择哪一种主要取决于个人喜好或者团队的编码规范。命令
mvn clean package -P war,prod会同时激活war和prod这两个 profiles。这种方式在需要根据不同的环境或配置同时应用多个 profiles 时非常有用。在你的例子中,假设
warprofile 配置了项目打包为 WAR 文件,而prodprofile 可能包含了生产环境特有的配置,如数据库配置、优化的日志设置等。使用这个命令,Maven 将整合这两个 profiles 的配置来构建项目。
5. 测试和部署
完成配置后,全面测试应用程序以验证正确的构建和运行。然后,根据环境需求将应用部署到相应的服务器上。
结论
使用 Maven Profiles 和依赖排除策略可以灵活地管理 Spring Boot 应用的不同构建和部署配置。这种方法特别适合于在多环境开发中切换打包方式的需求,提高了构建过程的灵活性和可维护性。
相关文章:
动态切换 Spring Boot 打包配置:使用 Maven Profiles 管理 JAR 和 WAR
引言 在多环境开发中,我们经常需要根据部署环境来改变 Spring Boot 应用的打包方式。本文将探讨如何使用 Maven Profiles 结合依赖排除来动态地切换 JAR 和 WAR 打包配置。 1. 修改 pom.xml 以支持 WAR 包 转换 Spring Boot 应用从 JAR 到 WAR 时,首先…...
微信小程序使用阿里巴巴矢量图标
一,介绍 微信小程序使用图标有两种方式,一种是在线获取,一种是下载到本地使用, 第一种在线获取的有个缺点就是图标是灰色的,不能显示彩色图标,而且第一种是每次请求资源的,虽然很快࿰…...
使用JAVA pdf转word
使用spire.pdf 非常简单。 查看 https://mvnrepository.com/artifact/e-iceblue/spire.pdf 注意,这个包在 e-iceblue 下。 下面开始撸代码 先来pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mav…...
成都瀚网科技有限公司抖音带货的正规
成都瀚网科技有限公司,一家在科技领域有着深厚积累的公司,近年来也开始涉足电子商务领域,特别是在抖音等短视频平台上进行带货活动。在这个充满机遇与挑战的时代,该公司以其独特的商业模式和运营策略,正在赢得消费者的…...
windows服务器热备、负载均衡配置
安装网络负载平衡 需要加入的服务器上全部需要安装网络负载平衡管理器 图形化安装:使用服务器管理器安装 在服务器管理器中,使用“添加角色和功能”向导添加网络负载均衡功能。 完成向导后,将安装 NLB,并且不需要重启计算机。 …...
samba服务器搭建 挂载远程目录 常用配置参数介绍
samba 直接复用linux的用户,但是Linux 用户的密码和 smbpasswd 设置的密码是分开的。 Linux 用户的密码是存储在 Linux 系统的用户数据库中,通常是 /etc/shadow 文件中以加密形式存储的。Samba 用户的密码是存储在专门的 Samba 密码数据库中 smbpasswd…...
Ansible命令使用
ansible ansible的命令 ansible命令模块Pingcommand 模块shell 模块copy 模块file 模块fetch 模块cron 模块yum 模块service 模块user 模块group 模块script 模块setup 模块get_url模块stat模块unarchive模块unarchive模块 ansible的命令 /usr/bin/ansible Ansibe AD-Hoc 临…...
element 周选择器el-date-picker
2023.11.13今天我学习了在使用element 周选择器的时候,我们会发现默认的时间选择为星期日到下一个星期一,如图: 我们需要改成显示星期一到星期天,只需要加一行代码:picker-options <el-date-pickertype"week&…...
No200.精选前端面试题,享受每天的挑战和学习
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...
前端面试之事件循环
什么是事件循环 首先, JavaScript是一门单线程的语言,意味着同一时间内只能做一件事,这并不意味着单线程就是阻塞,而是实现单线程非阻塞的方法就是事件循环 在JavaScript中,所欲任务都可以分为: 同步任务…...
sass 封装媒体查询工具
背景 以往写媒体查询可能是这样的: .header {display: flex;width: 100%; }media (width > 320px) and (width < 480px) {.header {height: 50px;} }media (width > 480px) and (width < 768px) {.header {height: 60px;} }media (width > 768px) …...
眼科动态图像处理系统使用说明(2023-8-11 ccc)
眼科动态图像处理系统使用说明 2023-8-11 ccc 动态眼科图像捕捉存贮分析与传输系统,是由计算机软件工程师和医学专家组结合,为满足医院临床工作的需要,在2000年开发的专门用于各类眼科图像自动化分析、处理和传输的软件系统。该系统可以和各…...
国际阿里云:提高CDN缓存命中率教程!!!
CDN缓存命中率低会导致源站压力大,静态资源访问效率低。您可以根据导致CDN缓存命中率低的具体原因,选择对应的优化策略来提高CDN的缓存命中率。 背景信息 CDN通过将静态资源缓存在CDN节点上实现资源访问加速。当客户端访问某资源时,如果CDN节…...
关于“谈谈你对 ES 的理解”
普通人 它是一个基于 Apache Lucene 开源的一个分布式搜索引擎框架。 一般用它来做 ● 日志记录和分析 ● 公共数据采集 ● 全文检索 ● 数据可视化分析等等 高手 Elasticsearch ,简称 ES 。它是建立在全文搜索引擎库 Apache Lucene 基础之上的一个开源的搜索…...
Element-Ui el-table 动态添加行
一、在项目需要使用 这个需求主要是在项目中需要用到 1.点击新增按钮,可以实现新增行。 2.在每个列里面可以进行输入。 3.可以删除新增的行,包括数据。 二、HTML代码 1.主要是循环每一个列,而且这些列都是动态,根据父组件传过来…...
深度学习 大数据 股票预测系统 - python lstm 计算机竞赛
文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 🔥 优质竞赛项目系列,今天…...
vue v-model
一、为什么使用v-model? v-model指令可以在表单input、textarea以及select元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。本质上是语法糖,负责监听用户的输入事件来更新数据。 二、什么场景下会使用v-model? ①…...
springboot整合ELK
ELK是一种强大的分布式日志管理解决方案,它由三个核心组件组成: Elasticsearch:作为分布式搜索和分析引擎,Elasticsearch能够快速地存储、搜索和分析大量的日志数据,帮助用户轻松地找到所需的信息。 Logstashÿ…...
线性表->栈
文章目录 前言概述栈的初始化销毁压栈出栈判断栈为不为空栈的有效个数 前言 栈相对于链表,稍微简单一点,但是栈的难点在于通过栈去理解递归算法。 概述 **栈:**一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。…...
linux rsyslog日志采集格式设定一
linux rsyslog日志采集格式设定一 1.创建日志接收模板 打开/etc/rsyslog.conf文件,在GLOBAL DIRECTIVES模块下任意位置添加以下内容 命令: vim /etc/rsyslog.conf 测试:rsyslog.conf文件结尾添加以下内容 $template ztj,"/var/log/%hostname%/%programname%.log&…...
HFSS仿真结果怎么看?以T型波导为例,读懂S参数与电场动态图
HFSS仿真结果深度解析:从S参数到电场动态图的实战指南当你第一次在HFSS中完成T型波导仿真后,面对满屏的曲线和彩色云图,是否感到既兴奋又困惑?那些起伏的S参数曲线究竟告诉你什么信息?电场图中跳跃的颜色又代表怎样的物…...
HDI 高密度互连板阶数的深度理解
一、概述高密度互连板(High Density Interconnector, HDI)是通过激光微孔技术和逐层积层工艺实现高密度布线的印制电路板。其阶数划分是行业内统一的技术标准,核心依据为独立积层压合次数与配套激光盲孔制程次数,而非单面层数或钻…...
深度解析HS2-HF Patch:从技术框架到创作工具链的完整升级方案
深度解析HS2-HF Patch:从技术框架到创作工具链的完整升级方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾因Honey Select 2的原版体验受…...
构建智能音乐档案:SoundCloud Downloader 的技术架构与实现哲学
构建智能音乐档案:SoundCloud Downloader 的技术架构与实现哲学 【免费下载链接】scdl Soundcloud Music Downloader 项目地址: https://gitcode.com/gh_mirrors/sc/scdl 在流媒体音乐主导的时代,音乐爱好者面临着一种矛盾:我们享受着…...
告别Windows卡顿!在VMware里给Kubuntu 22.04 LTS分区和安装的保姆级避坑指南
告别Windows卡顿!在VMware里给Kubuntu 22.04 LTS分区和安装的保姆级避坑指南你是否已经厌倦了Windows系统越来越慢的启动速度、频繁的后台更新和资源占用?当你的电脑开始频繁卡顿,或许该考虑给系统来一次"减负"了。Kubuntu 22.04 L…...
使用libusb-win32驱动复活老旧USB硬件:以Elektor Magic Eye为例
1. 项目概述:让老硬件在新时代焕发新生手头有一台十多年前的《Elektor》杂志上刊登的“Magic Eye EM84”复古VFD显示屏项目,想把它接到Windows 10电脑上当个酷炫的CPU占用率显示器,却发现官方提供的“AVR309”USB驱动在新系统上彻底罢工了。这…...
Windows键盘重映射终极指南:如何使用SharpKeys专业解决方案告别误触烦恼
Windows键盘重映射终极指南:如何使用SharpKeys专业解决方案告别误触烦恼 【免费下载链接】sharpkeys SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key. 项目地址: https://gitcode.com/gh_mirrors/sh…...
eqMac终极指南:macOS系统级音频均衡器免费使用教程
eqMac终极指南:macOS系统级音频均衡器免费使用教程 【免费下载链接】eqMac macOS System-wide Audio Equalizer & Volume Mixer 🎧 项目地址: https://gitcode.com/gh_mirrors/eq/eqMac 你是否曾经觉得Mac电脑的音质不够理想?想要…...
保姆级教程:用Prometheus Operator在K8S里一键搞定监控全家桶(附Grafana仪表盘)
云原生监控革命:用Prometheus Operator构建K8S智能监控体系 当Kubernetes集群规模突破50个节点时,传统监控方案的维护成本会呈指数级增长。我曾亲眼见证一个电商团队在"黑五"大促期间,因为手动配置的Prometheus抓取规则失效&#x…...
体验低延迟与高稳定性的大模型 API 聚合服务调用感受
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 体验低延迟与高稳定性的大模型 API 聚合服务调用感受 在集成大模型能力到实际应用的过程中,开发者最关心的往往是两个核…...
