全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-23 8 分钟 ✍️ juanwangdev

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 元素

元素说明
nameOS 名称
familyOS 家族
arch系统架构
versionOS 版本

family 值

说明
windowsWindows
unixLinux/Unix/Mac
macmacOS
dosDOS

文件存在激活

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 条件

📝 发现内容有误?点击此处直接编辑

← 上一篇 Profile 外部化配置管理
下一篇 → 多 Profile 组合与优先级
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库