Maven 預定義屬性
1 .介紹
在本教程中,我們將研究 Maven 中的預定義屬性。
屬性使建置配置更加動態、靈活和可重複使用。它允許我們設定不同層級的屬性以具有預設值,然後在需要時輕鬆覆寫它們。
讓我們更詳細地探討這些屬性。
2 。 Maven 預定義屬性
Maven 有一些方便的內建屬性,我們可以使用它們來簡化我們的配置。如果需要,我們甚至可以在pom.xml
檔案中直接對其進行自訂。
它們也可以用於由 Maven 資源插件的過濾功能處理的任何資源檔案中,例如application.properties
檔案。我們只需在使用它們時將它們包裝在${}
中。
2.1.使用範例
讓我們看看提供輸出目錄位置的屬性的用法:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>example.override.properties</groupId>
<artifactId>parameter-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.2</version>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
上面的範例顯示如何取得${project.build.directory}
的預設值,即src/main/resources
。
2.2.覆蓋屬性範例
讓我們來看一個提供自訂建置路徑的屬性:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>example.override.properties</groupId>
<artifactId>parameter-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<build>
<directory>src/main/resources/custom</directory>
</build>
</project>
在上面的範例中, ${project.build.directory}
透過在層次結構<project> -> <build> -> <directory>
。
3. 項目資訊屬性
讓我們看看一些用於引用項目資訊的屬性,例如其配置、元資料和建置資訊:
財產 | 描述 |
---|---|
${project.packaging} |
此屬性告訴 Maven 我們的專案產生了什麼樣的工件。預設情況下,它設定為“ jar” 。 |
${project.basedir} |
這指向我們專案的根目錄 - 與我們的pom.xml 檔案所在的資料夾相同。 |
如果沒有明確指定,某些屬性(例如${project.groupId}
和${project.version}
)可以從父 POM 繼承預設值。
4 .專案建構資訊屬性
現在,讓我們深入了解一些與建置過程中建置和儲存內容的位置相關的特定屬性:
財產 | 描述 |
---|---|
${project.build.directory} |
此屬性就像是建置過程中產生的所有檔案的中心樞紐。預設情況下,它是“ target/ ”。 |
${project.build.outputDirectory} |
它告訴我們 Maven 將所有主應用程式程式碼的已編譯類別放在哪裡。預設位置是“ target/classes ”。 |
${project.build.testOutputDirectory} |
編譯後的測試類別預設放在「 target/test-classes 」中。 |
${project.build.sourceDirectory} |
它指向我們的主要 Java 原始碼所在的目錄。預設位置是“ src/main/java ”。 |
${project.build.testSourceDirectory} |
此屬性告訴我們單元測試原始碼儲存在哪裡。預設情況下,它位於“ src/test/java ”。 |
${project.build.resources} |
這個指定了包含我們專案所有資源檔案(如設定檔或映像)的目錄。預設位置是“ src/main/resources ”。 |
${project.build.testResources} |
與前一個類似,但專門用於測試期間使用的資源。這些通常預設位於“ src/test/resources ”。 |
${project.build.finalName} |
此屬性決定最終建置工件的名稱,如 JAR 或 WAR 檔案。預設情況下,它將我們專案的工件 ID 與版本號結合在一起,例如「 ${ p ro j ec t . a r t i f a c t I d}- $ {project.version} |
5.系統屬性
除了自身的內建屬性之外,Maven 還可以利用我們電腦的 Java 虛擬機器 (JVM) 提供的系統屬性或我們執行程式時定義的屬性。這些屬性就像是環境特定細節的便捷快捷方式,例如檔案路徑或我們的作業系統:
財產 | 描述 |
---|---|
${java.home} |
這個告訴我們 JDK 或 JRE 在我們的系統上安裝在哪裡。 |
通常最好避免直接使用此屬性。原因是不同的建置環境(如 CI/CD)可能有不同的 JDK 位置,這可能會導致意外問題。更好的方法是使用${env.JAVA_HOME} 或建立一個明確指向我們的 JDK 位置的自訂屬性,因為它特別指的是JAVA_HOME 環境變量,該變數通常指向我們的 JDK 安裝的根目錄。 |
|
$(java.version} |
此屬性只是告訴我們正在使用的 Java 版本。 |
${os.name} 和${os.version} |
這兩個屬性協同工作來告訴我們我們使用的作業系統(如 Windows 或 macOS)及其版本號。 |
${user.dir} |
此屬性告訴我們執行 Maven 的目前工作目錄。 |
6. Maven 特定屬性
讓我們看看Maven 運行時和配置特有的屬性:
財產 | 描述 |
---|---|
${maven.version} |
此屬性告訴我們目前正在執行哪個版本的 Maven。 |
${settings.localRepository} |
此屬性指向我們本地 Maven 儲存庫的位置。預設情況下,它儲存在${user.home}/.m2/repository. 這是 Maven 下載並儲存我們所有專案依賴項的地方。 |
${settings.interactiveMode} |
此屬性決定 Maven 是否可以在建置過程中向我們要求輸入。預設情況下,它設定為true 。 |
${settings.offline} |
此屬性控制 Maven 是否應在離線模式下運作。當設定為true (不是預設值)時,Maven 僅使用本機儲存庫中已有的依賴項。當我們沒有有效的網路連線時這很有用。 |
7. 結論
在本文中,我們探討了 Maven 提供的幾個內建屬性。本質上,它們允許我們直接在pom.xml
檔案中輕鬆調整和更改設定。
此外,使用這些屬性而不是對路徑、值或任何其他配置等進行硬編碼總是一個好主意。這使得我們的專案更加靈活且更易於維護。