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二进制文件)需要进一步配置。
参考:https://www.jb51.net/program/3294793jy.htm
2.3 Maven 打包缺少环境配置文件
Spring 项目配置文件位置:
- 默认 src/main/resources 目录下的文件
- config 子目录下的配置文件
打包时需要进一步处理。
参考:进一步的,打包时时可以进一步优化,即开发环境,构建时只将测试资源文件打包到应用中,进一步提升项目的安全性。
<!-- 打包时将 将不同环境的配置文件复制到jar包中 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>copy-resources</id> <phase>process-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.outputDirectory}</outputDirectory> <resources> <resource> <directory>src/main/resources/resources-env/${env}</directory> <filtering>false</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <!-- 环境隔离 排除不需要的文件--> <excludes> <exclude>resources-env/**</exclude> </excludes> </configuration> </plugin>
三、进一步优化
3.1 缩小应用jar包的体积
伴随项目依赖越来越大,应用jar包的体积会越来越大,可以进一步优化。
参考:优化依赖打包
到此这篇关于Maven 不同环境灵活构建的步骤的文章就介绍到这了,更多相关Maven 不同环境构建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!