954 字
约 3 分钟
1
Maven 构建配置文件(Profiles)
2026-09-19
无标签
Maven 构建配置文件(Profiles)
什么是 Profile?
Profile 是 Maven 提供的一种机制,允许为不同的环境或条件定制构建过程。通过 Profile,可以在不同环境下使用不同的配置,如开发、测试、生产环境。
Profile 的类型
- 项目级 Profile:定义在 pom.xml 中
- 用户级 Profile:定义在 ~/.m2/settings.xml 中
- 全局级 Profile:定义在 $MAVEN_HOME/conf/settings.xml 中
基本 Profile 配置
在 pom.xml 中定义 Profile
<profiles>
<profile>
<id>development</id>
<properties>
<env>dev</env>
<database.url>jdbc:mysql://localhost:3306/myapp_dev</database.url>
<log.level>DEBUG</log.level>
</properties>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>
<profile>
<id>production</id>
<properties>
<env>prod</env>
<database.url>jdbc:mysql://prod-server:3306/myapp</database.url>
<log.level>WARN</log.level>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>
</profiles>
Profile 激活方式
1. 命令行激活
激活单个 Profile
$ mvn clean install -Pdevelopment
激活多个 Profile
$ mvn clean install -Pdevelopment,testing
禁用 Profile
$ mvn clean install -P!production
2. 默认激活
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<!-- Profile 配置 -->
</profile>
3. 基于属性激活
<profile>
<id>production</id>
<activation>
<property>
<name>env</name>
<value>prod</value>
</property>
</activation>
<!-- Profile 配置 -->
</profile>
$ mvn clean install -Denv=prod
4. 基于 JDK 版本激活
<profile>
<id>jdk11</id>
<activation>
<jdk>11</jdk>
</activation>
<!-- JDK 11 特定配置 -->
</profile>
<profile>
<id>jdk8-plus</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<!-- JDK 8 及以上版本配置 -->
</profile>
5. 基于操作系统激活
<profile>
<id>windows</id>
<activation>
<os>
<family>windows</family>
</os>
</activation>
<!-- Windows 特定配置 -->
</profile>
<profile>
<id>unix</id>
<activation>
<os>
<family>unix</family>
</os>
</activation>
<!-- Unix/Linux 特定配置 -->
</profile>
6. 基于文件存在激活
<profile>
<id>integration-tests</id>
<activation>
<file>
<exists>src/test/integration</exists>
</file>
</activation>
<!-- 集成测试配置 -->
</profile>
<profile>
<id>no-tests</id>
<activation>
<file>
<missing>src/test</missing>
</file>
</activation>
<!-- 无测试配置 -->
</profile>
Profile 可配置元素
| 元素 | 描述 | 示例 |
|---|---|---|
| properties | 定义属性 | |
| dependencies | 添加依赖 | 特定环境的数据库驱动 |
| dependencyManagement | 依赖管理 | 版本控制 |
| repositories | 仓库配置 | 私有仓库 |
| pluginRepositories | 插件仓库 | 插件源 |
| build | 构建配置 | 插件配置 |
| modules | 模块配置 | 多模块项目 |
| reporting | 报告配置 | 代码质量报告 |
实际应用示例
数据库配置 Profile
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<db.driver>org.h2.Driver</db.driver>
<db.url>jdbc:h2:mem:testdb</db.url>
<db.username>sa</db.username>
<db.password></db.password>
</properties>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
</dependencies>
</profile>
<!-- 生产环境 -->
<profile>
<id>prod</id>
<properties>
<db.driver>com.mysql.cj.jdbc.Driver</db.driver>
<db.url>jdbc:mysql://prod-db:3306/myapp</db.url>
<db.username>${db.prod.username}</db.username>
<db.password>${db.prod.password}</db.password>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
</profile>
</profiles>
构建优化 Profile
<profiles>
<!-- 快速构建(跳过测试和检查) -->
<profile>
<id>fast</id>
<properties>
<maven.test.skip>true</maven.test.skip>
<checkstyle.skip>true</checkstyle.skip>
<spotbugs.skip>true</spotbugs.skip>
</properties>
</profile>
<!-- 完整质量检查 -->
<profile>
<id>quality</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Settings.xml 中的 Profile
<!-- ~/.m2/settings.xml -->
<settings>
<profiles>
<profile>
<id>company-repo</id>
<repositories>
<repository>
<id>company-nexus</id>
<url>http://nexus.company.com/repository/maven-public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>company-nexus-plugins</id>
<url>http://nexus.company.com/repository/maven-public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>company-repo</activeProfile>
</activeProfiles>
</settings>
查看和管理 Profile
查看可用 Profile
查看所有可用的 Profile
$ mvn help:all-profiles
查看当前激活的 Profile
$ mvn help:active-profiles
Profile 优先级
- 命令行指定的 Profile(-P 参数)
- 用户 settings.xml 中的 activeProfiles
- 全局 settings.xml 中的 activeProfiles
- POM 中 activeByDefault 为 true 的 Profile
注意:当通过命令行激活 Profile 时,所有 activeByDefault 的 Profile 都会被禁用。
最佳实践
- 环境分离:为不同环境创建独立的 Profile
- 属性外化:将环境相关配置提取为属性
- 默认配置:为开发环境设置默认 Profile
- 文档说明:在项目文档中说明各 Profile 的用途
- CI/CD 集成:在持续集成中明确指定 Profile
- 敏感信息:避免在 POM 中硬编码敏感信息
常见问题
1. Profile 未激活
检查激活条件是否满足,使用 mvn help:active-profiles 查看
2. 属性未生效
确保属性在正确的 Profile 中定义,并且 Profile 已激活
3. 依赖冲突
不同 Profile 中的依赖可能产生冲突,需要仔细管理版本
Maven 构建配置文件(Profiles)
http://www.clxhxhhr.top/posts/2900/ 评论
0 条
还没有评论,先写一条吧。