pom.xml(Project Object Model)是 Maven 專案的核心配置檔案,定義了專案的座標、依賴關係、建置流程、外掛程式等所有建置資訊。掌握其結構與常用元素,是 Java 專案管理的必修課。
<project xmlns="https://maven.apache.org/POM/4.0.0"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 專案座標 (GAV) -->
<groupId>com.example</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging> <!-- jar, war, pom 等 -->
<!-- 專案資訊 -->
<name>My Project</name>
<description>專案描述</description>
<url>https://example.com</url>
<!-- 屬性定義,便於統一版本管理 -->
<properties>
<java.version>17</java.version>
<spring.boot.version>3.1.0</spring.boot.version>
</properties>
<!-- 依賴管理:統一版本,子模組引用時可省略版本號 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 實際依賴 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 版本由 dependencyManagement 統一控制 -->
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<!-- 建置外掛程式 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- 設定檔,支援多環境切換 -->
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env>dev</env>
</properties>
</profile>
</profiles>
</project>
正確設定 scope 能控制依賴的傳遞性與類別路徑:
| 範圍 | 編譯類別路徑 | 測試類別路徑 | 執行類別路徑 | 典型場景 |
|---|---|---|---|---|
| compile (預設) | ✓ | ✓ | ✓ | 核心業務依賴 |
| provided | ✓ | ✓ | ✗ | Servlet API、容器已提供的庫 |
| runtime | ✗ | ✓ | ✓ | JDBC 驅動、日誌實現 |
| test | ✗ | ✓ | ✗ | JUnit、Mockito |
| system | ✓ | ✓ | ✗ | 本機系統級 JAR(不推薦) |
| import | - | - | - | 僅用於 dependencyManagement 引入 BOM |
<dependency>
<groupId>A</groupId>
<artifactId>A</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>B</groupId>
<artifactId>B</artifactId>
</exclusion>
</exclusions>
</dependency>
mvn clean compile # 編譯主程式碼 mvn test # 執行測試 mvn package # 打包 (生成 target/*.jar) mvn install # 安裝到本地倉庫 mvn deploy # 部署到遠程私服 mvn dependency:tree # 查看依賴樹 mvn help:effective-pom # 查看合併後的有效 POM
掌握 pom.xml 的精髓,能讓專案建置更穩定、依賴更清晰、團隊協作更高效。