POM


https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
https://maven.apache.org/ref/current/maven-model/maven.html

1. Important Points#

POM = Project Object Model:
    Maven 项目的声明式构建配置

核心原则:
    project identity must be stable
    dependency versions should be centralized
    plugin versions should be explicit
    secrets must stay outside pom.xml

2. Coordinates#

<groupId>com.example</groupId>
<artifactId>order-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
Field Meaning
groupId 组织或包名空间
artifactId artifact 名称
version 当前 artifact 版本
packaging 构建产物类型,常见 jarwarpom

3. Properties#

<properties>
  <java.version>21</java.version>
  <maven.compiler.release>${java.version}</maven.compiler.release>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <spring-boot.version>3.3.1</spring-boot.version>
</properties>
properties:
    用于集中维护版本号和构建参数
    子 POM 可以继承或覆盖 parent properties

4. Dependencies#

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>
dependencies:
    当前项目真正需要的 jar

dependencyManagement:
    只管理默认版本,不会自动引入依赖

5. Build Plugins#

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.13.0</version>
        <configuration>
          <release>${java.version}</release>
        </configuration>
      </plugin>
    </plugins>
  </pluginManagement>

  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
    </plugin>
  </plugins>
</build>
pluginManagement:
    parent 里声明默认版本和配置

plugins:
    当前项目启用 plugin 或绑定 execution

6. Profiles#

<profiles>
  <profile>
    <id>prod</id>
    <properties>
      <app.env>prod</app.env>
    </properties>
  </profile>
</profiles>
./mvnw -Pprod clean package
./mvnw help:active-profiles
profile:
    根据环境或条件改变 build configuration
    不等于 Spring profile
    detailed usage is in Maven Profiles

7. Resources#

<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>false</filtering>
    </resource>
  </resources>
</build>
filtering:
    Maven 在资源文件中替换 ${property}
    不要用它注入 production secret

8. Packaging#

Packaging Use Case
jar 普通 Java library 或 application
war Servlet container 部署
pom parent POM 或 aggregator POM