Maven Profile 配置:支持不同环境的构建

1. 什么是 Maven Profile?

Maven Profile 是 Maven 提供的一种环境配置管理机制,可以根据不同的环境(如开发环境、测试环境、生产环境)定义不同的构建配置。

使用场景

  • 多环境配置:如 dev(开发环境)、test(测试环境)、prod(生产环境)。
  • 不同的依赖管理:如数据库驱动、日志框架、第三方 API 配置不同。
  • 不同的打包方式:如是否包含调试信息、优化参数。
  • 不同的服务器配置:如 Tomcat、JBoss、Spring Boot 配置文件。

2. Maven Profile 配置方法

Maven 的 Profile 可以在 pom.xmlsettings.xml 中定义,并通过命令行 -P 选项激活。

2.1 在 pom.xml 中定义 Profile

pom.xml 中,我们可以使用 <profiles> 标签定义多个 Profile,并在 <profile> 内部进行不同的环境配置。

<profiles><profile><id>dev</id> <!-- 开发环境 --><properties><env>development</env></properties><activation><activeByDefault>true</activeByDefault> <!-- 默认启用 --></activation></profile><profile><id>test</id> <!-- 测试环境 --><properties><env>testing</env></properties></profile><profile><id>prod</id> <!-- 生产环境 --><properties><env>production</env></properties></profile>
</profiles>

2.2 在 settings.xml 中定义 Profile

除了 pom.xml,Maven 还允许在用户目录下的 settings.xml(通常位于 ~/.m2/settings.xml)中定义 Profile。

<profiles><profile><id>dev</id><properties><database.url>jdbc:mysql://localhost/devdb</database.url></properties></profile>
</profiles>

注意:在 settings.xml 中定义的 Profile 适用于所有 Maven 项目


3. Profile 的激活方式

Maven 提供了多种方式来激活 Profile,我们可以手动选择激活 Profile,也可以通过环境变量、操作系统、属性等条件自动激活。

3.1 通过命令行激活

mvn clean package -P dev

这会激活 dev Profile,并执行 clean package 构建流程。

3.2 通过环境变量激活

Maven 允许使用 <activation> 规则,基于环境变量自动启用 Profile。

<profiles><profile><id>dev</id><activation><property><name>env</name><value>dev</value></property></activation></profile>
</profiles>

示例

mvn clean install -Denv=dev

此时,Maven 会匹配 <property> 里的 env=dev,自动激活 dev Profile。

3.3 通过操作系统激活

<profile><id>windows-profile</id><activation><os><family>Windows</family></os></activation>
</profile>

如果是在 Windows 上运行,则 windows-profile 会自动激活。

3.4 通过 JDK 版本激活

<profile><id>jdk-11</id><activation><jdk>11</jdk></activation>
</profile>

如果当前 JDK 版本是 11,则 jdk-11 Profile 会被自动激活。


4. 在 Profile 中使用不同的依赖

在不同的环境下,可能需要不同的数据库或依赖项。例如:

<profiles><profile><id>dev</id><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency></dependencies></profile><profile><id>prod</id><dependencies><dependency><groupId>oracle</groupId><artifactId>ojdbc8</artifactId><version>19.8.0.0</version></dependency></dependencies></profile>
</profiles>

在开发环境使用 MySQL,在生产环境使用 Oracle

使用 -P 指定 Profile:

mvn clean package -P dev

或:

mvn clean package -P prod

5. 在 Profile 中使用不同的构建配置

除了依赖管理,我们还可以在 Profile 中配置不同的构建插件。例如:

<profiles><profile><id>dev</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><debug>true</debug><fork>true</fork></configuration></plugin></plugins></build></profile><profile><id>prod</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><debug>false</debug><optimize>true</optimize></configuration></plugin></plugins></build></profile>
</profiles>

dev 环境下启用 debugprod 环境下优化代码,提升性能。


6. Profile 在 CI/CD(持续集成)中的应用

Maven Profile 在 Jenkins、GitLab CI/CD 等自动化构建工具中经常使用。

Jenkins 构建不同环境

Jenkins 构建任务中,可以在 Maven Goals 中指定:

clean install -P prod

这样,Jenkins 运行构建时会使用 prod Profile。

GitLab CI/CD 配置

stages:- build- test- deploybuild:stage: buildscript:- mvn clean package -P devdeploy:stage: deployscript:- mvn deploy -P prod

在 CI/CD 流水线中,不同的环境使用不同的 Profile


7. 总结

方法作用示例
手动激活通过 -P 指定 Profilemvn package -P dev
环境变量激活通过 -D 选项激活mvn clean install -Denv=dev
操作系统激活按 OS 类型激活Windows 上自动启用 windows-profile
JDK 版本激活适用于不同 JDK 版本仅在 JDK 11 上激活 jdk-11
不同的依赖管理在不同环境使用不同的数据库或库MySQL vs. Oracle
不同的构建配置devprod 使用不同的构建优化参数debug=true vs. optimize=true

Maven Profile 是企业级项目中必不可少的工具,它允许我们在 不同环境 之间 灵活切换配置,使得构建过程更加高效、稳定、可维护。🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15437.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<8>

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 今天我们复习前面学习的指针知识 目录 关于指针数组和数组指针的区别指针数组&#xff08;Array of Poi…

UE5.5 PCGFrameWork--GPU CustomHLSL

在上一篇UE5.5 PCGFrameWork使用入门-CSDN博客 大致介绍了UE5 PCG框架的基本使用. 本篇探索PCGFrame的高级应用--GPU点云。也就是利用GPU HLSL编程对点云进行操纵&#xff0c;可以大幅度提升点云生成效率。 目前在UE5 PCG框架中&#xff0c;点云GPU的应用大致分为三类: Point…

Games202 Lecture11 LTC | Disney principled BRDF | NPR

Shading with microfacet BRDFs under polygonal lighting -Linearly Transformed Cosines(LTC)Real-Time PBR Materials cont. -Disney principled BRDFNon-photorealistic rendering(NPR) Linearly Transformed Cosines(LTC) lobe花瓣 BRDF的2d形状 基本思路: 任意BRDF变…

Flink 内存模型各部分大小计算公式

Flink 的运行平台 如果 Flink 是运行在 yarn 或者 standalone 模式的话&#xff0c;其实都是运行在 JVM 的基础上的&#xff0c;所以首先 Flink 组件运行所需要给 JVM 本身要耗费的内存大小。无论是 JobManager 或者 TaskManager &#xff0c;他们 JVM 内存的大小都是一样的&a…

学习数据结构(8)双向链表

1.双向链表的实现 双向链表一般指带头双向循环链表 &#xff08;1&#xff09;双向链表的声明 &#xff08;2&#xff09;双向链表的打印 &#xff08;3&#xff09;向内存申请节点 &#xff08;4&#xff09;初始化双向链表 或 &#xff08;5&#xff09;尾部插入 &#xf…

【漫话机器学习系列】088.常见的输出层激活函数(Common Output Layer Activation Functions)

在神经网络中&#xff0c;输出层&#xff08;Output Layer&#xff09; 的激活函数&#xff08;Activation Function&#xff09;直接决定了模型的输出形式&#xff0c;并影响损失函数的选择及训练效果。不同的任务类型&#xff08;如分类或回归&#xff09;需要使用不同的激活…

Python 鼠标轨迹 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

工业相机在工业生产制造过程中的视觉检测技术应用

随着技术不断发展以及工业4.0时代的到来&#xff0c;利用工业相机进行视觉检测技术已经成为制造业不可或缺的一部分。通过结合先进的计算机视觉、AI算法和自动化设备&#xff0c;工业视觉检测为生产线质量控制和效率提升提供了革命性的解决方案。 一、什么是工业视觉检测技术 …

了解网络层

目录 一、IP协议 二、地址管理 IP地址 概念 作用 格式 网段划分 三、路由选择 网络层要做的事情主要是两个方面&#xff1a; 地址管理&#xff1a;制定一系列的规则&#xff0c;通过地址&#xff0c;描述出网络上一个设备的位置。路由选择&#xff1a;网络环境比较复杂…

NO.11十六届蓝桥杯备战|if-else语句|嵌套if|悬空else|练习4道(C++)

if-else语句 if语句 if语句的语法形式如下&#xff1a; if ( 表达式 ) 语句;表达式成⽴&#xff08;为真&#xff09;&#xff0c;则语句执⾏&#xff0c;表达式不成⽴&#xff08;为假&#xff09;&#xff0c;则语句不执⾏ 0为假&#xff0c;⾮0表⽰真&#xff0c;也就是…

Json-RPC框架项目(一)

目录 1. 项目介绍: 2. 技术选择; 3. 第三方库介绍; 4. 项目功能; 5. 模块功能; 6. 项目实现: 1. 项目介绍: RPC是远程过程调用, 像调用本地接口一样调用远程接口, 进行完成业务处理, 计算任务等, 一个完整的RPC包括: 序列化协议, 通信协议, 连接复用, 服务注册, 服务发…

Discourse 创建和配置用户自定义字段

用户自定义字段能够让你在用户注册的是要求用户提供更多的信息。这些用户提供的信息可以在用户名片&#xff0c;用户摘要页面下显示&#xff0c;甚至还可以通过 Data Explorer plugin 插件进行查询。 本文能够帮助你对这些字段进行配置和设置。 添加一个用户字段 进入 Admin…

从零到一:我的元宵灯谜小程序诞生记

缘起&#xff1a;一碗汤圆引发的灵感 去年元宵节&#xff0c;我正捧着热腾腾的汤圆刷朋友圈&#xff0c;满屏都是"转发锦鲤求灯谜答案"的动态。看着大家对着手机手忙脚乱地切换浏览器查答案&#xff0c;我突然拍案而起&#xff1a;为什么不做一个能即时猜灯谜的微信…

【C++11】lambda和包装器

1.新的类功能 1.1默认的移动构造和移动赋值 原来C类中&#xff0c;有6个默认成员函数&#xff1a;构造函数/析构函数/拷⻉构造函数/拷⻉赋值重载/取地址重 载/const 取地址重载&#xff0c;最后重要的是前4个&#xff0c;后两个⽤处不⼤&#xff0c;默认成员函数就是我们不写…

Java企业电子招投标系统:Spring Cloud微服务架构-强化企业招采竞争力:电子化招投标平台助力效率与成本控制-支持二次开发

​在当今激烈的市场竞争环境下&#xff0c;企业规模的持续扩大使得招采管理变得日益重要&#xff0c;已成为企业提升核心竞争力的关键一环。为了实现更高效、更高质量的招采成果&#xff0c;我们设计了一套基于电子化平台的解决方案&#xff0c;旨在通过电子化招投标系统&#…

计算机毕业设计Spark+大模型知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

打家劫舍3

今天和打家讲一下打家劫舍3 题目&#xff1a; 题目链接&#xff1a;337. 打家劫舍 III - 力扣&#xff08;LeetCode&#xff09; 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为root。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“…

指定路径安装Ollama

通过鼠标双击安装&#xff0c;默认会安装到C盘下&#xff0c;如果需要更换默认路径则可以通过命令的方式将Ollama安装到其他盘的某个目录下。 OllamaSetup.exe /DIR"D:\Ollama" #DIR指定安装路径 执行上述命令后&#xff0c;会弹出OllamaSetup.exe安装窗体界面&…

Linux:库

目录 静态库 动态库 目标文件 ELF文件 ELF形成可执行 ELF可执行加载 ELF加载 全局偏移量表GOT(global offset table) 库是写好的&#xff0c;成熟的&#xff0c;可以复用的代码 现实中每个程序都要依赖很多的基础的底层库&#xff0c;不可能都是从零开始的 库有两种…

心脏滴血漏洞复现(CVE-2014-0160)

漏洞范围&#xff1a; OpenSSL 1.0.1版本 漏洞成因&#xff1a; Heartbleed漏洞是由于未能在memcpy()调用受害用户输入内容作为长度参数之前正确进 行边界检查。攻击者可以追踪OpenSSL所分配的64KB缓存、将超出必要范围的字节信息复 制到缓存当中再返回缓存内容&#xff0c;…