maven profile 是解决多环境配置的核心机制,它允许在构建时动态激活不同配置(如dev/test/prod的数据库url、api地址等);通过在pom.xml中定义profiles并配合resources filtering,可将${db.url}等占位符替换为对应环境的实际值;常用命令行方式-pprod激活,支持多profile同时启用及条件自动激活。

Maven 的 profile 是解决多环境配置问题的核心机制,它允许你在构建时动态激活不同配置,比如开发、测试、生产环境的数据库连接、API 地址等。
profile 的定义方式
profile 可以定义在三个位置,优先级从高到低:项目 pom.xml、用户 settings.xml(~/.m2/settings.xml)、全局 settings.xml(Maven 安装目录下)。日常推荐定义在项目 pom.xml 中,便于团队统一管理和版本控制。
在 <project></project> 标签下添加 <profiles></profiles> 块:
<profiles><profile><id>dev</id><properties><env>development</env><db.url>jdbc:h2:mem:testdb</db.url></properties><activation><activebydefault>true</activebydefault></activation></profile><profile><id>prod</id><properties><env>production</env><db.url>jdbc:mysql://prod-db:3306/app</db.url></properties></profile></profiles>
配合 resources 过滤实现配置文件替换
仅定义 profile 不够,还需让 Maven 在打包时把占位符(如 ${db.url})替换成实际值。这需要启用 resource filtering,并配合 profile 中的 properties 使用。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 在
<build></build>中配置<resources></resources>,启用 filtering:
<build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/*.properties</include><include>**/*.yml</include></includes></resource></resources></build>
然后在 src/main/resources/application.properties 中写:
spring.profiles.active=@env@ spring.datasource.url=@db.url@
Maven 构建时会自动将 @env@ 和 @db.url@ 替换为当前激活 profile 中定义的 property 值。
激活 profile 的常用方式
-
命令行激活:最常用,灵活且显式
mvn clean package -Pprod(激活 id 为 prod 的 profile)mvn clean package -Pdev,logging-debug(同时激活多个) -
根据系统属性或环境变量激活:
在 profile 中加<activation><property><name>env</name><value>prod</value></property></activation>,然后运行mvn package -Denv=prod - 根据 JDK 或操作系统激活(适合底层适配,较少用于环境切换)
与 Spring Boot 配合更简洁(可选进阶)
如果你用的是 Spring Boot,Maven profile + spring.profiles.active 可以联动:
- Maven profile 设置
<env>prod</env> - resources 中写
spring.profiles.active=@env@ - 打包后生成的 jar 会自动加载
application-prod.yml等对应 profile 文件 - 也可直接用 Spring Boot 的
--spring.profiles.active=prod启动参数覆盖,Maven profile 主要用于构建期差异化资源处理










