当前位置: 首页 > news >正文

Maven 不同环境灵活构建

需求:
使用 Maven根据不同的构建环境(如开发、测试、生产)来定义不同的配置,实现灵活的构建管理。
需要Demo项目的可以参考:我的demo项目

一、项目分层

一般的初创项目不会有特别多的配置文件,所以使用 spring.profiles.active就可以满足需求,但伴随项目规模扩大,引入的依赖/中间件越多,配置文件越多,仅仅靠单一的文件无法满足,可以参考下面的结构:

├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── github
│   │   └── resources
│   │       ├── resources-env
│   │       │   ├── dev
│   │       │   └── prod
│   │       └── static

1. 使用 Maven 配置不同环境

在 Maven 中,<profiles> 是一个非常强大的功能,它允许你根据不同的构建环境(如开发、测试、生产)来定义不同的配置。在 pom.xml 文件中使用 <profiles>,可以对插件、依赖、属性等进行差异化配置,进而实现灵活的构建管理。

1.1 配置不同的环境

pom.xml配置如下:

<profiles><!-- 本地开发 --><profile><id>dev</id><properties><env>dev</env></properties><activation><activeByDefault>true</activeByDefault> <!-- 默认使用 dev --></activation></profile><!-- 测试 --><profile><id>test</id><properties><env>test</env></properties></profile><!-- 预发 --><profile><id>pre</id><properties><env>pre</env></properties></profile><!-- 生产 --><profile><id>prod</id><properties><env>prod</env></properties></profile>
</profiles>

1.2 配置构建信息

pom.xml文件如下:

 <build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource><resource><directory>src/main/resources/resources-env/${env}</directory><filtering>true</filtering> <!-- 启用资源过滤 --></resource></resources><plugins><!--     spring 配置文件可以使用占位符读取pom.xml中的变量 例如 @env@       --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><configuration><delimiters><delimiter>@</delimiter></delimiters><useDefaultDelimiters>false</useDefaultDelimiters></configuration></plugin></plugins></build>

1.3 Spring 配置文件激活不同环境的配置文件

application.properties 文件配置如下:

spring.profiles.active=@env@

1.4 构建项目

命令参考:

mvn clean package -Pprod

二、可能遇到的问题

2.1 IDEA直接启动项目,读取不到环境配置文件

项目环境变量设置有问题。

解决方法:
IDEA 操作 File -> Project Structure -> Modules 设置 Resources 就可以了

在这里插入图片描述

2.2 启动项目,报错:IOException: DerInputStream.getLength()

错误原因是因为 <filtering>true</filtering> 会进行文件过滤,非纯文本文件(例如.p12二进制文件)需要进一步配置。

参考:解决方案

2.3 Maven 打包缺少环境配置文件

Spring 项目配置文件位置:

  • 默认 src/main/resources 目录下的文件
  • config 子目录下的配置文件

打包时需要进一步处理。

参考:解决方案

三、进一步优化

3.1 缩小应用jar包的体积

伴随项目依赖越来越大,应用jar包的体积会越来越大,可以进一步优化。

参考:优化依赖打包

http://www.lryc.cn/news/469533.html

相关文章:

  • 第三十篇:TCP连接断开过程,从底层说明白,TCP系列五
  • 代码随想录算法训练营第七天| 哈希表理论基础 454.四数相加II 383.赎金信 15.三数之和 18.四数之和
  • 搜维尔科技:Manus新品发布Metagloves Pro专业版,专为高精度需求的客户打造,尤其是人形机器人产业与人机工效研究使用
  • Spring Boot实现的动态化酒店住宿管理系统
  • 数字IC后端实现Innovus |给各种IP子模块添加port buffer和antenna diode万能脚本
  • 反向代理服务器---NGINX
  • unity3d————场景管理类SceneManager
  • 鹅厂面试官:Transformer 为何需要位置编码?
  • MySQL数据库学习指南
  • 算法刷题-小猫爬山
  • Maven项目管理工具-初始+环境配置
  • 【JavaEE初阶】网络编程TCP协议实现回显服务器以及如何处理多个客户端的响应
  • Android 中的串口开发
  • TensorRt OP
  • 构建负责任的人工智能:数据伦理与隐私保护
  • 微信小程序live-pusher和video同时使用,video播放声音时时大时小
  • MySQL 分库分表实战
  • MySQL—CRUD—进阶—(二) (ಥ_ಥ)
  • 时序分解 | TTNRBO-VMD改进牛顿-拉夫逊算法优化变分模态分解
  • 2024“源鲁杯“高校网络安全技能大赛-Misc-WP
  • CSS行块标签的显示方式
  • Go 语言中的 for range 循环教程
  • 青训营 X 豆包MarsCode 技术训练营--小M的比赛胜场计算
  • 海王3纯源码
  • 【ShuQiHere】Linux 系统中的硬盘管理详解:命令与技巧
  • 数据结构之堆和二叉树的简介
  • 微信小程序上传图片添加水印
  • xshell5找不到匹配的host key算法
  • Linux中安装Tomcat
  • RV1126音视频学习(二)-----VI模块