前言:在软件开发流程中,一个项目通常会经历三个阶段(也可以叫做环境),开发环境,测试环境,生产环境。在这三个环境中,应用程序的配置参数往往是不同的。最典型的例子就是数据库连接。而传统的解决办法是手动修改,反复注释代码,这样不仅繁琐而且危险。为了解决这个问题,Maven 引入了 Profile 机制。
Profile的工作逻辑:
它允许我们在 pom.xml 中定义多套环境配置,并在构建项目时(打包时)动态地指定使用哪一套。在 pom.xml 中定义多个 profile,每个 profile 里指定对应环境的配置参数。然后在项目资源文件(如 application.properties 或 jdbc.properties)中使用变量占位符(如 ${db.url})。最后,在执行 mvn package 命令时,通过 -P 参数激活对应的 profile,Maven 就会在打包时自动将变量替换为当前环境的具体值。
多环境配置与应用:
maven提供配置多种环境的设定,帮助开发者使用过程中快速切换环境。这个过程涵盖了从项目配置、编码、打包到部署的整个生命周期,核心目标就是让一套代码能通过自动化的方式,适配不同运行环境
第一阶段:项目配置与设计
这个阶段主要在项目搭建时完成,目的是定义好有哪些环境以及如何管理它们。
1. 定义配置变量
在项目的配置文件(如src/main/resources/application.properties)中,不使用具体的值,而是使用占位符变量。
# 原内容:spring.datasource.url=jdbc:mysql://localhost:3306/test
# 修改为:
spring.datasource.url=${db.url}
spring.datasource.username=${db.username}
spring.datasource.password=${db.password}
2. 规划资源配置
在 pom.xml 中做两件事:
-
开启资源过滤 :告诉Maven在打包时,需要解析资源文件(如
.properties)中的变量(${xxx}),并替换成真实值。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering> <!-- 开启过滤替换功能 -->
</resource>
</resources>
</build>
定义Profile :在<profiles>标签内定义不同的环境。每个环境有自己的id和对应的属性值。
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<properties>
<db.url>jdbc:mysql://localhost:3306/dev_db</db.url>
<db.username>dev_user</db.username>
<db.password>123456</db.password>
</properties>
<!-- 可选:默认激活dev环境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 生产环境 -->
<profile>
<id>prod</id>
<properties>
<db.url>jdbc:mysql://192.168.1.100:3306/prod_db</db.url>
<db.username>prod_admin</db.username>
<db.password>Prod@2024!</db.password>
</properties>
</profile>
</profiles>
第二阶段:构建与打包
这个阶段发生在需要生成部署包的时候(例如在开发人员本地打包,或者在自动化构建服务器如Jenkins上)。
3. 执行打包命令
通过Maven命令,指定本次打包要使用哪个环境的配置。
第三阶段:部署与运行
5. 分发与部署
-
刚才生成的
dev包,会被部署到开发人员的本地服务器或开发环境服务器。 -
刚才生成的
prod包,会被部署到生产环境的服务器。
过程概览:
开发人员编写代码
│
▼
配置文件使用变量: ${db.url} (在 src/main/resources/)
│
▼
pom.xml 中定义多套Profile:
<profile id="dev"> 定义 dev.db.url=localhost
<profile id="prod"> 定义 prod.db.url=生产IP
│
▼
执行构建命令:
│
├── 如果是 mvn package -P dev
│ │
│ ▼
│ Maven过滤替换: ${db.url} -> localhost
│ │
│ ▼
│ 生成 dev 包 (连接开发库)
│
├── 如果是 mvn package -P prod
│ │
│ ▼
│ Maven过滤替换: ${db.url} -> 生产IP
│ │
│ ▼
│ 生成 prod 包 (连接生产库)
│
▼
将打好的包部署到对应环境的服务器上运行
跳过测试:
在Maven的多环境开发或日常构建中,"跳过测试" 是一个非常常见的需求。它的核心目的是为了加快构建速度,特别是在测试环节比较耗时,或者你确信代码逻辑没问题,只想快速打包部署的时候。
在Maven中,跳过测试主要有三种方式,它们的力度 和使用场景各不相同。
1. 命令行方式(最常用,临时跳过)
在执行mvn package或mvn install命令时,附加一个参数。
-DskipTests:不执行测试,但编译测试类
|----------------------------------------------------|
| 含义:跳过测试用例的执行 ,但仍然会编译测试目录下的代码。 |
| 结果:target/test-classes/目录下仍然有编译好的测试类字节码文件,只是没运行。 |
| 使用场景:大部分临时打包场景都用这个,因为它保留了编译过程,一旦你想回头运行测试,不需要重新编译。 |
-Dmaven.test.skip=true:彻底跳过,连编译都不做
|---------------------------------------------------------|
| 含义:不仅不执行测试,连测试代码都不编译。 |
| 结果:速度比-DskipTests更快。 |
| 使用场景:极少数情况,比如测试代码依赖某些环境变量但当前环境缺失,导致编译都通不过;或者为了极限追求打包速度。 |
2. 在pom.xml中配置(长期生效,永久跳过)
如果你希望某个模块或者整个项目永远都不运行测试(例如:一个纯工具类项目,或者一个打包模块),可以在pom.xml的<properties>或<plugin>中配置。
3. 在 IDEA 等 IDE 中操作(可视化)
如果你使用的是 IntelliJ IDEA,可以直接在 Maven 工具栏中操作:
-
点击右上角的 Maven 图标展开面板。
-
点击 "Toggle Skip Tests Mode" 按钮(一个带有 Junit 图标的蓝色圆圈,中间有一个叉号)。
-
点亮这个图标后,再点击
package等命令,就会自动追加-DskipTests参数。
maven私服:
私服相当于一个缩小版的中央仓库,便于公司内部进行资源传输。
常见私服的安装:
之后打开控制台,执行cmd窗口,输入nexus.exe 空格/run空格nexus;(在没有中文的目录,最好安装在C盘,否则报错)
结语:
最后的最后,感谢大家观看到最后,如果对你有帮助,请**一键三连,点赞,关注(拜托了),收藏,**你的支持就是我最大的鼓励,除夕夜,小北在这里祝大家新年快乐,平安顺遂!
