954 字
约 3 分钟
1
Maven 构建配置文件(Profiles)
无标签

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 定义属性 dev
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 优先级

  1. 命令行指定的 Profile(-P 参数)
  2. 用户 settings.xml 中的 activeProfiles
  3. 全局 settings.xml 中的 activeProfiles
  4. 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/
作者
clxstart
发布于
2026-09-19
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。