首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Maven POM.xml 核心配置詳解:從坐標到構建生命周期的完整指南

     編輯:Java 綜合教學

POM 核心結構概覽

pom.xml 是 Maven 項目的「身份證」與「施工藍圖」。本文提煉 600+ 行完整配置中的高頻核心元素,按功能域分類解析。

1. 坐標與基礎信息(GAV)

<groupId>com.example</groupId>       <!-- 組織/項目唯一標識,通常反域名 -->
<artifactId>my-app</artifactId>    <!-- 模塊名稱,構件 ID -->
<version>1.0.0-SNAPSHOT</version> <!-- 版本號:主.次.增量-限定符 -->
<packaging>jar</packaging>         <!-- 產出類型:jar/war/pom/ear -->
<name>My Application</name>        <!-- 顯示名稱,文檔生成用 -->
<description>項目描述</description>  <!-- 詳細描述,支持 HTML -->
<url>https://example.com</url>       <-- 項目主頁 -->

2. 繼承與聚合

<!-- 父項目坐標(繼承) -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.0</version>
    <relativePath/> <!-- 查找父 pom 路徑,空標簽禁用查找 -->
</parent>

<!-- 聚合:子模塊列表(多模塊項目) -->
<modules>
    <module>core</module>
    <module>web</module>
</modules>

3. 依賴管理(核心高頻)

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.20</version>
        <type>jar</type>           <!-- 默認 jar -->
        <classifier>sources</classifier> <!-- 附加構件:sources/javadoc/tests -->
        <scope>compile</scope>      <!-- 範圍:compile/test/provided/runtime/system -->
        <optional>false</optional> <!-- 可選依賴,阻斷傳遞 -->
        <exclusions>                <!-- 排除傳遞依賴,解決版本衝突 -->
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

<!-- 依賴版本統一管理(子模塊引用時可省略 version) -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>5.3.20</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

依賴範圍速查表

Scope編譯類路徑測試類路徑運行類路徑打包典型場景
compile✓✓✓✓默認,項目核心依賴
provided✓✓✗✗容器提供:servlet-api, JPA API
runtime✗✓✓✗JDBC 驅動、日誌實現
test✗✓✗✗JUnit, Mockito
system✓✓✗✗本地 JAR(需 systemPath),不推薦

4. 構建配置

<build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <outputDirectory>target/classes</outputDirectory>
    <testOutputDirectory>target/test-classes</testOutputDirectory>
    <finalName>${artifactId}-${version}</finalName> <!-- 輸出文件名 -->

    <resources>                  <!-- 主資源過濾/包含/排除 -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering> <!-- 啟用 ${property} 替換 -->
            <includes><include>**/*.xml</include></includes>
            <excludes><exclude>**/*.properties</exclude></excludes>
        </resource>
    </resources>

    <pluginManagement>          <!-- 統一插件版本/配置,子模塊引用生效 -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

    <plugins>                    <!-- 實際生效的插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skipTests>false</skipTests>
            </configuration>
        </plugin>
    </plugins>
</build>

5. Profile:多環境構建

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault> <!-- 默認激活 -->
            <!-- 或:<jdk>1.8</jdk> <os><family>windows</family></os> <property><name>env</name><value>dev</value></property> -->
        </activation>
        <properties>
            <db.url>jdbc:mysql://localhost:3306/dev</db.url>
        </properties>
        <build><!-- 覆蓋構建配置 --></build>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <db.url>jdbc:mysql://prod-db:3306/prod</db.url>
        </properties>
    </profile>
</profiles>

啟動:mvn package -Pprod 或 -Denv=prod(配合 property 激活)。

6. 倉庫與分發

<repositories>         <!-- 依賴下載倉庫 -->
    <repository>
        <id>aliyun</id>
        <url>https://maven.aliyun.com/repository/public</url>
        <releases><enabled>true</enabled></releases>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
</repositories>

<pluginRepositories> <!-- 插件下載倉庫 --> ... </pluginRepositories>

<distributionManagement> <-- 部署目標 -->
    <repository>          <-- Release 發布倉庫 -->
        <id>releases</id>
        <url>https://nexus:8081/repository/releases/</url>
    </repository>
    <snapshotRepository> <-- SNAPSHOT 發布倉庫 -->
        <id>snapshots</id>
        <url>https://nexus:8081/repository/snapshots/</url>
    </snapshotRepository>
    <site>                <-- 站點部署 -->
        <id>site</id>
        <url>dav:https://nexus:8081/site/</url>
    </site>
</distributionManagement>

7. 常用屬性

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.3.20</spring.version> <!-- 自定義屬性,${spring.version} 引用 -->
</properties>

最佳實踐清單

  1. 父項目管理版本(dependencyManagement + pluginManagement),子模塊零版本號。
  2. 善用 provided/runtime 範圍控制傳遞依賴,精簡 WAR 包體積。
  3. 鎖定插件版本(pluginManagement),避免插件升級導致構建不穩定。
  4. Profile 隔離環境差異(數據庫、中間件地址),構建產物環境無關。
  5. 配置阿里云/私服鏡像加速依賴下載,settings.xml 全局生效。
  6. mvn help:effective-pom 查看合併後的最終 POM,排查配置衝突神器。

POM 不僅是配置文件,更是項目架構治理的契約。精通 POM,方能駕馭 Maven 的自動化構建之力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved