Maven作为主流的项目构建工具,提供了profiles机制来支持多环境构建需求,开发者可以通过配置不同的profile来适配开发、测试、生产等不同场景的参数要求,其中profiles.xml是存放profile配置的常见方式之一。

什么是Maven profile
Maven profile是一组可选的配置集合,包含插件配置、属性定义、依赖管理等内容,可以在特定的环境下被激活,从而覆盖默认的构建配置。通过profile可以实现不同环境下的差异化构建,避免手动修改配置带来的错误。
profiles.xml的配置方式
profiles.xml通常放在项目的根目录下,和pom.xml同级,用来集中管理多个profile配置。需要注意的是,Maven 3.1之后不再推荐在项目根目录使用profiles.xml,更建议将profile配置直接写在pom.xml中,不过仍有不少老项目在使用这种配置方式。
基础配置结构
profiles.xml的核心结构是<profiles>标签下包含多个<profile>子标签,每个<profile>对应一个环境的配置,每个profile需要设置唯一的id用于激活时识别。
<?xml version="1.0" encoding="UTF-8"?>
<profiles>
<!-- 开发环境配置 -->
<profile>
<id>dev</id>
<properties>
<env>dev</env>
<db_url>jdbc:mysql://127.0.0.1:3306/dev_db</db_url>
<db_username>dev_user</db_username>
<db_password>dev_pass</db_password>
</properties>
</profile>
<!-- 测试环境配置 -->
<profile>
<id>test</id>
<properties>
<env>test</env>
<db_url>jdbc:mysql://192.168.0.1:3306/test_db</db_url>
<db_username>test_user</db_username>
<db_password>test_pass</db_password>
</properties>
</profile>
<!-- 生产环境配置 -->
<profile>
<id>prod</id>
<properties>
<env>prod</env>
<db_url>jdbc:mysql://ipipp.com:3306/prod_db</db_url>
<db_username>prod_user</db_username>
<db_password>prod_pass</db_password>
</properties>
</profile>
</profiles>
配置说明
上述配置中定义了三个环境:dev(开发)、test(测试)、prod(生产),每个profile通过<properties>标签定义了该环境下的自定义属性,这些属性可以在pom.xml或者项目资源文件中被引用。
在pom.xml中关联profiles.xml
如果使用了独立的profiles.xml,需要在pom.xml中声明profile的激活方式或者引用路径,不过Maven默认会自动读取项目根目录下的profiles.xml,无需额外配置路径。如果需要在pom.xml中定义资源过滤,让profile中的属性生效,需要添加如下配置:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resources>
</build>
开启<filtering>为true后,Maven在构建时会将src/main/resources目录下的文件中的占位符替换为当前激活的profile中定义的属性值。
多环境配置的使用流程
1. 创建配置文件模板
在src/main/resources目录下创建配置文件,比如db.properties,使用Maven属性占位符引用profile中定义的属性:
db.url=${db_url}
db.username=${db_username}
db.password=${db_password}
2. 激活指定的profile
有多种方式可以激活profile,常用的有以下几种:
- 命令行激活:在执行Maven命令时通过-P参数指定profile的id,比如激活开发环境:
mvn clean package -P dev,激活生产环境:mvn clean package -P prod - settings.xml中激活:在Maven的全局配置文件settings.xml或者用户级settings.xml中配置默认激活的profile,适合固定环境的场景
- 根据环境自动激活:在profile中配置<activation>标签,比如根据操作系统、JDK版本、环境变量等条件自动激活对应的profile
3. 验证配置生效
执行构建命令后,可以查看target/classes目录下的db.properties文件,确认属性已经被替换为对应环境的参数,比如执行mvn clean package -P dev后,db.properties的内容应该是:
db.url=jdbc:mysql://127.0.0.1:3306/dev_db db.username=dev_user db.password=dev_pass
注意事项
- profiles.xml中的profile id必须唯一,否则激活时会出现冲突
- 如果同时在pom.xml和profiles.xml中定义了相同id的profile,pom.xml中的配置优先级更高
- 敏感配置比如生产环境的密码不建议直接写在profiles.xml中,可以通过环境变量或者Maven的settings.xml的<servers>标签来管理
- 使用资源过滤时,注意转义特殊字符,避免属性替换出现错误
替代方案:直接在pom.xml中配置profile
由于Maven新版本不推荐使用独立的profiles.xml,更推荐将profile配置直接写在pom.xml的<profiles>标签中,配置方式和profiles.xml中的结构一致:
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
<db_url>jdbc:mysql://127.0.0.1:3306/dev_db</db_url>
</properties>
</profile>
</profiles>
这种方式的优势是配置和项目绑定,不需要额外的文件,也更符合Maven的官方推荐规范,新项目建议优先采用这种方式。
Mavenprofiles.xml多环境配置profile修改时间:2026-07-03 00:54:28