Profile 条件激活机制
Profile 支持多种条件自动激活,无需手动指定。
JDK 版本激活
匹配 JDK 版本
XML
<profile>
<id>java17</id>
<activation>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
</profile>
版本范围
XML
<activation>
<jdk>[11,17)</jdk> <!-- JDK 11 到 17(不含17) -->
</activation>
多版本支持
XML
<profiles>
<profile>
<id>java8</id>
<activation>
<jdk>1.8</jdk>
</activation>
</profile>
<profile>
<id>java11</id>
<activation>
<jdk>11</jdk>
</activation>
</profile>
<profile>
<id>java17</id>
<activation>
<jdk>17</jdk>
</activation>
</profile>
</profiles>
操作系统激活
OS 条件
XML
<profile>
<id>linux</id>
<activation>
<os>
<name>linux</name>
<family>unix</family>
</os>
</activation>
</profile>
<profile>
<id>windows</id>
<activation>
<os>
<family>windows</family>
</os>
</activation>
</profile>
<profile>
<id>mac</id>
<activation>
<os>
<family>mac</family>
</os>
</activation>
</profile>
OS 元素
| 元素 | 说明 |
|---|---|
| name | OS 名称 |
| family | OS 家族 |
| arch | 系统架构 |
| version | OS 版本 |
family 值
| 值 | 说明 |
|---|---|
| windows | Windows |
| unix | Linux/Unix/Mac |
| mac | macOS |
| dos | DOS |
文件存在激活
exists 条件
XML
<profile>
<id>custom-config</id>
<activation>
<file>
<exists>${project.basedir}/custom.properties</exists>
</file>
</activation>
</profile>
missing 条件
XML
<profile>
<id>default-config</id>
<activation>
<file>
<missing>${project.basedir}/custom.properties</missing>
</file>
</activation>
</profile>
应用场景
XML
存在 custom.properties → 使用自定义配置
不存在 → 使用默认配置
属性激活
存在属性激活
Bash
<profile>
<id>debug</id>
<activation>
<property>
<name>debug</name> <!-- 存在 debug 属性即激活 -->
</property>
</activation>
</profile>
XML
mvn package -Ddebug
属性值匹配激活
Bash
<profile>
<id>prod</id>
<activation>
<property>
<name>env</name>
<value>prod</value> <!-- env=prod 时激活 -->
</property>
</activation>
</profile>
XML
mvn package -Denv=prod
组合条件
同时满足多个条件
Bash
<activation>
<jdk>17</jdk>
<os>
<family>unix</family>
</os>
<property>
<name>env</name>
<value>prod</value>
</property>
</activation>
条件关系
XML
多个条件需全部满足才激活
条件优先级
激活优先级
XML
1. 命令行 -P(最高)
2. 属性 -D
3. 文件条件
4. JDK 条件
5. OS 条件
6. activeByDefault(最低)
查看激活条件
text
mvn help:active-profiles
mvn help:all-profiles
all-profiles 输出
text
[INFO] Profile Id: dev (Activation: activeByDefault)
[INFO] Profile Id: java17 (Activation: jdk=17)
[INFO] Profile Id: linux (Activation: os family=unix)
实际应用示例
JDK 版本适配
text
<profiles>
<profile>
<id>legacy-java</id>
<activation>
<jdk>[1.8,11)</jdk>
</activation>
<dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
</dependencies>
</profile>
<profile>
<id>modern-java</id>
<activation>
<jdk>[11,)</jdk>
</activation>
<dependencies>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
</dependency>
</dependencies>
</profile>
</profiles>
平台特定依赖
text
<profiles>
<profile>
<id>linux-native</id>
<activation>
<os>
<family>unix</family>
<arch>x86_64</arch>
</os>
</activation>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>native-lib-linux</artifactId>
</dependency>
</dependencies>
</profile>
<profile>
<id>windows-native</id>
<activation>
<os>
<family>windows</family>
</os>
</activation>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>native-lib-windows</artifactId>
</dependency>
</dependencies>
</profile>
</profiles>
条件激活注意
注意事项
| 注意 | 说明 |
|---|---|
| 条件互斥 | 避免多 Profile 同时激活冲突 |
| 默认 Profile | 避免多个 activeByDefault |
| 条件更新 | JDK/OS 变化需重新激活 |
要点总结
- 按 JDK 版本激活
- 按操作系统激活
- <file exists/missing> 按文件存在激活
- 按属性存在或值激活
- 多条件需全部满足才激活
- 命令行 -P 优先级最高
- help:all-profiles 查看所有 Profile 条件
📝 发现内容有误?点击此处直接编辑