1. 概述
在本篇短小精悍的教程中,我们将探讨如何在 Maven 的 pom.xml
文件中读取环境变量,从而灵活定制构建行为。
这种方式在 CI/CD 流水线中尤为常见——比如根据不同的部署环境动态设置编译版本、启用特定插件等。✅
2. 环境变量的使用
✅ 基本语法:${env.VARIABLE_NAME}
要在 pom.xml
中引用环境变量,标准写法是使用 ${env.VARIABLE_NAME}
占位符。
举个实际场景:我们想让 Java 编译版本由外部环境控制,而不是写死在配置里。这样就能在不同机器或流水线中自由切换 JDK 版本。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.12.1</version>
<configuration>
<source>${env.JAVA_VERSION}</source>
<target>${env.JAVA_VERSION}</target>
</configuration>
</plugin>
</plugins>
</build>
⚠️ 注意:如果运行时没有设置 JAVA_VERSION
环境变量,Maven 会直接报错,构建失败。所以你必须提前设置。
🐧 Linux/macOS 设置方式:
export JAVA_VERSION=11
mvn clean package
💹 Windows 设置方式:
set JAVA_VERSION=11
mvn clean package
✅ 提供默认值:使用 Maven Profile
光靠环境变量不够健壮——万一忘了设呢?我们可以通过 Maven Profile 来兜底,提供一个默认的 Java 版本。
<profiles>
<profile>
<id>default-java</id>
<activation>
<property>
<name>!env.JAVA_VERSION</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.12.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
📌 关键点解释:
<activation><property><name>!env.JAVA_VERSION</name></property></activation>
表示:当JAVA_VERSION
环境变量不存在时,激活此 profile。- Profile 中定义的
maven-compiler-plugin
会覆盖主配置中的同名插件。 - 这样就实现了“有环境变量用环境变量,没有就走默认值”的优雅降级策略。✅
💡 小贴士:这种模式在多环境构建中非常实用,比如 dev/staging/prod 使用不同配置源,但又不想把敏感信息写进代码。
3. 总结
通过 ${env.VAR_NAME}
语法,我们可以轻松将外部环境变量注入到 Maven 构建流程中,实现高度可配置的构建逻辑。
再配合 Maven Profile 的条件激活机制,既能保持灵活性,又能避免因变量缺失导致构建中断。
✅ 推荐实践:
- 在 CI 脚本中统一设置关键环境变量
- 对非强制变量提供合理的默认 profile
- 避免在
pom.xml
中硬编码环境相关参数
这套组合拳在实际项目中属于“简单粗暴但极其有效”的踩坑经验,建议集合备用。