Profile 是 Maven 提供的一种机制,允许为不同的环境或条件定制构建过程。通过 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> <id>development</id> <activation> <activeByDefault>true</activeByDefault> </activation> <!-- Profile 配置 --> </profile>
<profile> <id>production</id> <activation> <property> <name>env</name> <value>prod</value> </property> </activation> <!-- Profile 配置 --> </profile>
<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>
<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>
<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>
元素 | 描述 | 示例 |
---|---|---|
properties | 定义属性 | <env>dev</env> |
dependencies | 添加依赖 | 特定环境的数据库驱动 |
dependencyManagement | 依赖管理 | 版本控制 |
repositories | 仓库配置 | 私有仓库 |
pluginRepositories | 插件仓库 | 插件源 |
build | 构建配置 | 插件配置 |
modules | 模块配置 | 多模块项目 |
reporting | 报告配置 | 代码质量报告 |
<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>
<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>
<!-- ~/.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>
检查激活条件是否满足,使用 mvn help:active-profiles
查看
确保属性在正确的 Profile 中定义,并且 Profile 已激活
不同 Profile 中的依赖可能产生冲突,需要仔细管理版本