使用 Maven 建置 Java API 專案時,選擇 maven-archetype-quickstart 外掛可以快速建立基礎架構。設定 GroupId、ArtifactId 和 Version 後,專案結構便確立,包含 src/main/java 存放 API 原始碼,src/test/java 存放單元測試程式碼。pom.xml 檔案定義專案的依賴關係,例如 TestNG,Maven 會自動下載並管理這些依賴。建置過程中,Maven 會根據 pom.xml 的設定,執行清理、編譯、測試、封裝等步驟。開發者可以使用 Maven 命令列工具,例如 mvn clean install,來執行這些步驟。設定 Maven 環境變數 JAVA_HOME 和 M2_HOME 後,即可在命令列中使用 Maven 指令管理專案。
建立Java API專案使用Maven
當您開發一個Web應用程式時,您需要maven-archetype-webapp,它會為您的應用程式建立所需的目錄結構。然而,在本例中,我們要建立一個簡單的Java API專案,因此我們使用maven-archetype-quickstart外掛。
步驟6:選擇Maven Archetype
輸入maven-archetype-quickstart到篩選欄位中,然後點選下一步按鈕。
步驟7:下載Artifact外掛
點選下一步按鈕後,Maven會開始下載Artifact外掛(如圖11-5所示),這可能需要一些時間。
圖表翻譯:
sequenceDiagram
participant 使用者 as "使用者"
participant Maven as "Maven"
Note over 使用者,Maven: 點選下一步按鈕
Maven->>Maven: 下載Artifact外掛
Note over Maven,Maven: 下載完成
步驟8:填寫GroupId、ArtifactId和Version
一旦Artifact下載完成,您將看到新建Maven專案視窗。在這裡,您需要填寫GroupId、ArtifactId和Version。
- GroupId:表示專案的所有者或群組,類別似的專案會在這個群組下建立。
- ArtifactId:專案的名稱。
- Version:專案的特定版本,可以從Artifact倉函式庫下載。
例如,我使用了Pranodayd作為GroupId,CalculatorAPI作為ArtifactId,版本設定為1.0(如圖11-6所示)。
內容解密:
// GroupId示例
String groupId = "Pranodayd";
// ArtifactId示例
String artifactId = "CalculatorAPI";
// Version示例
String version = "1.0";
步驟9:建立Maven專案
點選完成按鈕後,Maven會開始建立專案。
Maven專案目錄結構
Maven專案目錄是根據您在建立專案時指定的ArtifactId名稱建立的。讓我們看看在專案中建立的目錄和檔案。
src/main/java:這是預設的應用程式原始碼目錄,您應該在這裡建立Java包目錄結構。它包含原始碼檔案。在這個目錄中,會根據GroupId和ArtifactId建立包目錄結構。
圖表翻譯:
flowchart TD
A[Maven專案] --> B[src/main/java]
B --> C[Java包目錄結構]
C --> D[原始碼檔案]
內容解密:
// 示例Java包目錄結構
package com.pranodayd.calculatorapi;
專案設定與Maven
在使用Maven建立Java API專案時,首先需要了解專案結構和各個檔案的作用。專案根目錄下包含src/main/java和src/test/java兩個目錄,分別存放API的原始碼和單元測試程式碼。
API原始碼
API原始碼放在src/main/java目錄下,根據GroupId和ArtifactId建立相應的包結構。在這個例子中,GroupId是Pranodayd,ArtifactId是CalculatorAPI,因此包結構是Pranodayd/CalculatorAPI。在這個包中,可以建立Java類別來實作API的功能,例如Calculator.java。
單元測試程式碼
單元測試程式碼放在src/test/java目錄下,也根據GroupId和ArtifactId建立相應的包結構。這裡可以建立Java類別來實作單元測試,例如TestAdditionFunctionality.java、TestSubtractionFunctionality.java等。這些測試類別使用TestNG框架來執行測試,並生成測試報告。
pom.xml檔案
pom.xml檔案是Maven專案的核心,定義了專案的各種細節。其中包括:
- 專案識別資訊:定義了GroupId、ArtifactId和版本號。
- 屬性:定義了Java版本、編碼等屬性。
- 依賴:定義了第三方函式庫的依賴關係,包括版本號和作用域。
例如,以下是pom.xml檔案的一部分:
<groupId>Pranodayd</groupId>
<artifactId>CalculatorAPI</artifactId>
<version>1.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
這裡定義了專案的識別資訊、屬性和依賴關係。其中,TestNG依賴的作用域是test,表示只在單元測試階段需要這個依賴。
圖表翻譯:
graph LR
A[Maven專案] -->|包含|> B[pom.xml]
B -->|定義|> C[專案識別資訊]
B -->|定義|> D[屬性]
B -->|定義|> E[依賴]
C -->|包括|> F[GroupId]
C -->|包括|> G[ArtifactId]
C -->|包括|> H[版本號]
D -->|定義|> I[Java版本]
D -->|定義|> J[編碼]
E -->|定義|> K[第三方函式庫]
E -->|定義|> L[版本號]
E -->|定義|> M[作用域]
這個圖表展示了Maven專案的結構和pom.xml檔案的內容。pom.xml檔案定義了專案的識別資訊、屬性和依賴關係,而這些資訊又包括了GroupId、ArtifactId、版本號、Java版本、編碼、第三方函式庫、版本號和作用域等細節。
Maven 專案建置與依賴管理
Maven 是一個強大的建置工具,能夠幫助我們管理專案的依賴和建置過程。當我們建立一個 Maven 專案時,Maven 會在本地建立一個倉函式庫(local repository),用於儲存所有需要的外掛和依賴。
依賴管理
Maven 會根據 pom.xml 檔案中定義的依賴來下載需要的 jar 檔案,並將其儲存在本地倉函式庫中。當我們執行 Maven 建置時,Maven 會檢查本地倉函式庫中是否已經有需要的依賴,如果有就會直接使用,如果沒有就會從中央倉函式庫(central repository)下載並儲存在本地倉函式庫中。
例如,當我們在 pom.xml 檔案中定義了一個依賴,如 TestNg 時,Maven 會根據 GroupId、ArtifactId 和 Version 來下載相應的 jar 檔案,並建立一個目錄結構來儲存這些檔案。
目錄結構
Maven 會根據 GroupId、ArtifactId 和 Version 來建立一個目錄結構來儲存下載的 jar 檔案。例如,當我們下載 TestNg 7.4.0 版本時,Maven 會建立以下目錄結構:
org
testng
testng
7.4.0
修改本地倉函式庫位置
如果需要修改本地倉函式庫的位置,可以在 ${use.homer}\.m2 目錄下的 settings.xml 檔案中指定新的位置。例如:
<settings>
<localRepository>D:\MavenRepo</localRepository>
</settings>
Maven 建置組態
Maven 的建置組態可以在 pom.xml 檔案中的 <build> 區段中進行設定。這個區段可以包含多個外掛的組態,例如 maven-clean-plugin、maven-resources-plugin、maven-compiler-plugin 等。
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<!--... -->
</plugins>
</pluginManagement>
</build>
內容解密:
上述組態檔案中的 <build> 區段是用於定義 Maven 的建置過程。其中,<pluginManagement> 區段用於管理外掛的版本,以避免使用 Maven 的預設版本。
每個 <plugin> 區段都定義了一個外掛的組態,包括 artifactId 和 version。例如,maven-clean-plugin 用於清除目錄,maven-resources-plugin 用於處理資源檔案,maven-compiler-plugin 用於編譯 Java 程式碼。
圖表翻譯:
graph LR A[Maven] -->|下載依賴|> B[本地倉函式庫] B -->|儲存依賴|> C[目錄結構] C -->|建立目錄結構|> D[GroupId/ArtifactId/Version] D -->|儲存 jar 檔案|> E[jar 檔案]
上述圖表展示了 Maven 下載依賴並儲存在本地倉函式庫中的過程。首先,Maven 下載需要的依賴,並將其儲存在本地倉函式庫中。然後,Maven 根據 GroupId、ArtifactId 和 Version 來建立一個目錄結構,並儲存下載的 jar 檔案。
Maven 專案建置過程與命令列工具使用
Maven 的 pom.xml 檔案中定義了專案的建置生命週期,包括清理、編譯、測試、封裝和佈署等階段。每個階段都會使用特定的 Maven 外掛程式來執行。
建置生命週期階段
- 清理:Maven 使用
maven-clean-plugin來清除之前生成的編譯檔案和封裝檔案,然後重新執行建置生命週期。 - 下載資源:在這個階段,Maven 會下載專案的所有依賴項,包括其迴圈依賴項。
- 編譯應用程式原始碼:Maven 使用
maven-compiler-plugin來編譯應用程式的原始碼。這個外掛程式會使用javac來編譯src/main/java目錄下的.java檔案。 - 單元測試:Maven 首先編譯單元測試程式碼,然後使用
maven-surefire-plugin來執行單元測試。 - 封裝:Maven 使用
maven-jar-plugin來封裝應用程式的編譯檔案(.class檔案)到一個.jar檔案中。 - 釋出:Maven 有一個安裝階段,在這個階段中,Maven 會將
.jar檔案安裝到 Maven 的本地倉函式庫中。
使用 Maven 命令列工具
要使用 Maven 命令列工具,首先需要下載並安裝 Maven。下載 Apache Maven 的二進位制檔案(例如 apache-maven-3.8.1-bin.zip),然後解壓縮到您想要的位置。接下來,需要將 mvn 命令檔案新增到系統的 PATH 環境變數中,並設定 JAVA_HOME 和 M2_HOME 環境變數。
- 下載 Maven 二進位制檔案並解壓縮。
- 將
mvn命令檔案新增到 PATH 環境變數中。 - 設定
JAVA_HOME和M2_HOME環境變數。
設定環境變數的步驟如下:
- 開啟「開始」功能表,輸入「編輯系統環境變數」,然後選擇「編輯系統環境變數」。
- 在「系統屬性」視窗中,點選「環境變數」按鈕。
- 在「環境變數」視窗中,您可以設定新的環境變數或修改現有的環境變數。
完成以上步驟後,您就可以使用 Maven 命令列工具來管理您的 Java 專案了。
在深入探討如何利用 Maven 建置 Java API 專案後,我們可以發現,從專案初始設定、依賴管理到建置流程,Maven 提供了一套標準化且高效的機制。透過 pom.xml 檔案的組態,我們能清晰地定義專案的結構、依賴關係以及建置生命週期各階段的執行策略。尤其在依賴管理方面,Maven 的中央倉函式庫機制有效解決了jar包版本衝突和相依性問題,大幅簡化了開發流程。然而,Maven 的學習曲線較陡峭,需要開發者理解其核心概念和組態方式。此外,對於大型專案,Maven 的建置速度可能成為瓶頸,需要透過一些最佳化策略來提升效率。展望未來,隨著雲原生技術的發展,Maven 與容器化技術的整合將更加緊密,預計將出現更多自動化建置和佈署的解決方案。對於 Java 開發者而言,掌握 Maven 不僅是提升開發效率的利器,更是邁向現代軟體工程實踐的關鍵一步。 建議開發團隊投入資源學習 Maven 並建立最佳實務,以充分發揮其效能,並為未來技術發展做好準備。