在 Maven 的 pom.xml
文件中,${}
格式的變量(稱為屬性占位符)的值來源主要有以下幾種途徑:
1. ?內置屬性(Maven 預定義)??
${project.basedir}
:項目根目錄${project.version}
:項目版本${project.groupId}
:項目 Group ID${maven.build.timestamp}
:構建時間戳- 完整列表見 Maven Properties Reference。
2. ?**pom.xml
內自定義屬性**?
在 <properties>
標簽中定義:
<properties><java.version>17</java.version><spring.version>5.3.10</spring.version>
</properties>
使用時:${java.version}
和 ${spring.version}
。
3. ?父 POM 繼承的屬性?
如果項目繼承自父 POM(如 Spring Boot Starter Parent):
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version>
</parent>
父 POM 中定義的屬性(如 ${java.version}
)會自動繼承。
4. ?Settings.xml 文件中的屬性?
在 Maven 的全局配置文件 ~/.m2/settings.xml
或項目級 settings.xml
中定義:
<settings><profiles><profile><properties><env>production</env></properties></profile></profiles>
</settings>
使用時:${env}
。
5. ?命令行動態傳入?
通過 -D
參數在構建命令中傳遞:
mvn clean install -Dcustom.property=value
在 pom.xml
中直接使用 ${custom.property}
。
6. ?環境變量?
系統環境變量可通過 env.
前綴訪問:
<!-- 獲取操作系統環境變量 -->
<property><path>${env.PATH}</path>
</property>
7. ?資源過濾(Resource Filtering)??
在 src/main/resources
目錄下的文件(如 application.properties
)中定義屬性,并通過資源過濾傳遞到 pom.xml
:
<build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources>
</build>
優先級順序(高 → 低):
- ?命令行參數?(
-Dproperty=value
) pom.xml
中的<properties>
- 父 POM 中的屬性
settings.xml
中的屬性- 環境變量
- 內置屬性
檢查屬性值來源
- 通過
mvn help:effective-pom
命令查看最終生效的 POM(包含所有屬性解析結果)。 - 在構建時添加
-X
參數(調試模式)查看詳細解析過程:mvn clean install -X
通過以上途徑,Maven 在構建時會動態替換 pom.xml
中的所有 ${}
占位符。