官网完整配置

<?xml version="1.0" encoding="UTF-8"?>
<!--
  POM (Project Object Model) 是Maven的核心配置文件
  定义了项目的基本信息、依赖关系、构建配置等
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
         child.project.url.inherit.append.path=".."> <!-- 子项目URL继承时追加路径 -->

  <!-- 必须的模型版本,对于Maven 2和3都是4.0.0 -->
  <modelVersion>4.0.0</modelVersion>

  <!-- 父项目信息 - 用于继承配置 -->
  <parent>
    <groupId>父项目的组织ID</groupId>
    <artifactId>父项目的artifact ID</artifactId>
    <version>父项目版本</version>
    <relativePath>相对于本项目的路径(可选)</relativePath>
  </parent>

  <!-- 项目基本信息 -->
  <groupId>项目的组织ID(通常为反转域名)</groupId>
  <artifactId>项目的唯一标识符</artifactId>
  <version>项目版本(格式: 主版本.次版本.增量版本-限定版本号)</version>
  <packaging>打包类型(jar/war/ear/pom等)</packaging>

  <!-- 项目描述信息 -->
  <name>项目显示名称</name>
  <description>项目详细描述</description>
  <url>项目主页URL</url>
  <inceptionYear>项目创始年份</inceptionYear>

  <!-- 组织信息 -->
  <organization>
    <name>组织名称</name>
    <url>组织URL</url>
  </organization>

  <!-- 许可证信息 -->
  <licenses>
    <license>
      <name>许可证名称(如Apache License 2.0)</name>
      <url>许可证文本URL</url>
      <distribution>分发方式(如repo)</distribution>
      <comments>许可证附加说明</comments>
    </license>
  </licenses>

  <!-- 开发者信息 -->
  <developers>
    <developer>
      <id>开发者ID</id>
      <name>开发者姓名</name>
      <email>开发者邮箱</email>
      <url>开发者个人主页</url>
      <organization>所属组织</organization>
      <organizationUrl>组织URL</organizationUrl>
      <roles>
        <role>角色1</role>
        <role>角色2</role>
      </roles>
      <timezone>时区(如+8)</timezone>
      <properties>
        <!-- 自定义属性 -->
        <key>value</key>
      </properties>
    </developer>
  </developers>

  <!-- 贡献者信息(类似开发者) -->
  <contributors>
    <contributor>
      <name>贡献者姓名</name>
      <email>贡献者邮箱</email>
      <url>贡献者主页</url>
      <organization>所属组织</organization>
      <organizationUrl>组织URL</organizationUrl>
      <roles>
        <role>角色</role>
      </roles>
      <timezone>时区</timezone>
      <properties>
        <key>value</key>
      </properties>
    </contributor>
  </contributors>

  <!-- 邮件列表 -->
  <mailingLists>
    <mailingList>
      <name>邮件列表名称</name>
      <subscribe>订阅地址</subscribe>
      <unsubscribe>退订地址</unsubscribe>
      <post>投稿地址</post>
      <archive>归档地址</archive>
      <otherArchives>
        <archive>其他归档地址</archive>
      </otherArchives>
    </mailingList>
  </mailingLists>

  <!-- 构建前提条件 -->
  <prerequisites>
    <maven>最低Maven版本要求</maven>
  </prerequisites>

  <!-- 子模块列表(多模块项目使用) -->
  <modules>
    <module>子模块1</module>
    <module>子模块2</module>
  </modules>

  <!-- 源代码版本控制信息 -->
  <scm child.scm.connection.inherit.append.path=".."
        child.scm.developerConnection.inherit.append.path=".."
        child.scm.url.inherit.append.path="..">
    <connection>SCM连接URL(只读)</connection>
    <developerConnection>开发者SCM连接URL(读写)</developerConnection>
    <tag>代码标签</tag>
    <url>可浏览的SCM仓库URL</url>
  </scm>

  <!-- 问题跟踪系统 -->
  <issueManagement>
    <system>问题跟踪系统名称(如JIRA)</system>
    <url>问题跟踪系统URL</url>
  </issueManagement>

  <!-- 持续集成系统 -->
  <ciManagement>
    <system>CI系统名称(如Jenkins)</system>
    <url>CI系统URL</url>
    <notifiers>
      <notifier>
        <type>通知类型(如mail)</type>
        <sendOnError>出错时是否发送</sendOnError>
        <sendOnFailure>失败时是否发送</sendOnFailure>
        <sendOnSuccess>成功时是否发送</sendOnSuccess>
        <sendOnWarning>警告时是否发送</sendOnWarning>
        <address>通知地址</address>
        <configuration>
          <key>value</key>
        </configuration>
      </notifier>
    </notifiers>
  </ciManagement>

  <!-- 分发管理 -->
  <distributionManagement>
    <!-- 发布版本仓库 -->
    <repository>
      <uniqueVersion>是否使用唯一版本号</uniqueVersion>
      <releases>
        <enabled>是否启用发布版本部署</enabled>
        <updatePolicy>更新策略</updatePolicy>
        <checksumPolicy>校验和策略</checksumPolicy>
      </releases>
      <snapshots>
        <enabled>是否启用快照版本部署</enabled>
        <updatePolicy>更新策略</updatePolicy>
        <checksumPolicy>校验和策略</checksumPolicy>
      </snapshots>
      <id>仓库ID</id>
      <name>仓库名称</name>
      <url>仓库URL</url>
      <layout>仓库布局(default)</layout>
    </repository>

    <!-- 快照版本仓库 -->
    <snapshotRepository>
      <!-- 配置同repository -->
    </snapshotRepository>

    <!-- 项目站点 -->
    <site child.site.url.inherit.append.path="..">
      <id>站点ID</id>
      <name>站点名称</name>
      <url>站点URL</url>
    </site>

    <!-- 下载URL -->
    <downloadUrl>项目下载URL</downloadUrl>

    <!-- 项目重定位信息 -->
    <relocation>
      <groupId>新groupId</groupId>
      <artifactId>新artifactId</artifactId>
      <version>新版本</version>
      <message>重定位说明</message>
    </relocation>

    <status>项目状态</status>
  </distributionManagement>

  <!-- 自定义属性 -->
  <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>
  </properties>

  <!-- 依赖管理(多模块项目用于统一管理依赖版本) -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>依赖的组织ID</groupId>
        <artifactId>依赖的artifact ID</artifactId>
        <version>依赖版本</version>
        <type>依赖类型(默认为jar)</type>
        <classifier>分类器</classifier>
        <scope>作用域(compile/runtime/test等)</scope>
        <systemPath>系统路径(scope为system时使用)</systemPath>
        <exclusions>
          <exclusion>
            <artifactId>要排除的artifact ID</artifactId>
            <groupId>要排除的组织ID</groupId>
          </exclusion>
        </exclusions>
        <optional>是否可选</optional>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <!-- 项目依赖 -->
  <dependencies>
    <!-- 配置同dependencyManagement中的dependency -->
  </dependencies>

  <!-- 仓库配置 -->
  <repositories>
    <repository>
      <releases>
        <enabled>是否启用发布版本</enabled>
        <updatePolicy>更新策略</updatePolicy>
        <checksumPolicy>校验和策略</checksumPolicy>
      </releases>
      <snapshots>
        <enabled>是否启用快照版本</enabled>
        <updatePolicy>更新策略</updatePolicy>
        <checksumPolicy>校验和策略</checksumPolicy>
      </snapshots>
      <id>仓库ID</id>
      <name>仓库名称</name>
      <url>仓库URL</url>
      <layout>仓库布局(default)</layout>
    </repository>
  </repositories>

  <!-- 插件仓库 -->
  <pluginRepositories>
    <!-- 配置同repositories -->
  </pluginRepositories>

  <!-- 构建配置 -->
  <build>
    <!-- 源代码目录配置 -->
    <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
    <scriptSourceDirectory>${project.basedir}/src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
    <outputDirectory>${project.basedir}/target/classes</outputDirectory>
    <testOutputDirectory>${project.basedir}/target/test-classes</testOutputDirectory>

    <!-- 构建扩展 -->
    <extensions>
      <extension>
        <groupId>扩展的组织ID</groupId>
        <artifactId>扩展的artifact ID</artifactId>
        <version>扩展版本</version>
      </extension>
    </extensions>

    <!-- 默认构建目标 -->
    <defaultGoal>install</defaultGoal>

    <!-- 资源文件处理 -->
    <resources>
      <resource>
        <targetPath>目标路径</targetPath>
        <filtering>是否启用过滤</filtering>
        <directory>资源目录</directory>
        <includes>
          <include>包含模式</include>
        </includes>
        <excludes>
          <exclude>排除模式</exclude>
        </excludes>
      </resource>
    </resources>

    <!-- 测试资源文件处理 -->
    <testResources>
      <!-- 配置同resources -->
    </testResources>

    <directory>${project.basedir}/target</directory>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <filters>
      <filter>过滤器文件路径</filter>
    </filters>

    <!-- 插件管理(多模块项目用于统一管理插件版本) -->
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>插件组织ID</groupId>
          <artifactId>插件artifact ID</artifactId>
          <version>插件版本</version>
          <extensions>是否加载扩展</extensions>
          <executions>
            <execution>
              <id>执行ID</id>
              <phase>绑定生命周期阶段</phase>
              <goals>
                <goal>插件目标</goal>
              </goals>
              <inherited>是否被子项目继承</inherited>
              <configuration>
                <!-- 插件特定配置 -->
              </configuration>
            </execution>
          </executions>
          <dependencies>
            <!-- 插件依赖 -->
          </dependencies>
          <inherited>是否被子项目继承</inherited>
          <configuration>
            <!-- 插件全局配置 -->
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>

    <!-- 插件配置 -->
    <plugins>
      <!-- 配置同pluginManagement中的plugin -->
    </plugins>
  </build>

  <!-- 报告配置(已弃用) -->
  <reports>
    <!-- 报告artifact ID -->
  </reports>

  <!-- 报告插件配置 -->
  <reporting>
    <excludeDefaults>是否排除默认报告</excludeDefaults>
    <outputDirectory>${project.basedir}/target/site</outputDirectory>
    <plugins>
      <plugin>
        <groupId>报告插件组织ID</groupId>
        <artifactId>报告插件artifact ID</artifactId>
        <version>报告插件版本</version>
        <reportSets>
          <reportSet>
            <id>报告集ID</id>
            <reports>
              <report>报告目标</report>
            </reports>
            <inherited>是否继承</inherited>
            <configuration>
              <!-- 报告配置 -->
            </configuration>
          </reportSet>
        </reportSets>
        <inherited>是否继承</inherited>
        <configuration>
          <!-- 全局报告配置 -->
        </configuration>
      </plugin>
    </plugins>
  </reporting>

  <!-- 构建配置文件 -->
  <profiles>
    <profile>
      <id>profile标识符</id>

      <!-- 激活条件 -->
      <activation>
        <activeByDefault>是否默认激活</activeByDefault>
        <jdk>JDK版本范围</jdk>
        <os>
          <name>操作系统名称</name>
          <family>操作系统家族</family>
          <arch>系统架构</arch>
          <version>操作系统版本</version>
        </os>
        <property>
          <name>属性名</name>
          <value>属性值</value>
        </property>
        <file>
          <missing>缺失的文件</missing>
          <exists>存在的文件</exists>
        </file>
      </activation>

      <!-- 可包含build/repositories/pluginRepositories/dependencies等配置 -->
      <!-- 与主POM中的配置方式相同 -->

    </profile>
  </profiles>
</project>

这个模板包含了 Maven POM 文件的所有可能元素,并添加了详细的注释说明。实际使用时,可以根据项目需求保留需要的部分,删除不需要的部分。大多数项目只需要其中的一小部分配置即可正常工作。

关键部分说明:

  • 基本信息(groupId/artifactId/version)是必须的

  • dependencies 部分是最常用的,管理项目依赖

  • build 部分配置构建过程和插件

  • properties 用于定义变量

  • profiles 用于环境特定的配置

关于 依赖的内容及作用

<type> 元素在 Maven 的 <dependency> 标签中用于指定依赖项的类型。它定义了所依赖项目的打包格式。

  • 默认值: 如果不显式声明 <type>,其默认值为 jar。这意味着大多数情况下,你依赖的是一个标准的 JAR 文件。

作用:

  • 确定打包方式: 告诉 Maven 这个依赖是 JAR、WAR、POM 还是其他格式。
  • 影响类路径: 不同类型的依赖对项目的类路径(classpath)有不同的影响。例如,jar 类型的依赖通常会被添加到运行时或编译时的类路径中。
  • 决定如何处理: Maven 会根据类型来决定如何处理和使用这个依赖。例如,如果依赖是一个 war,Maven 可能会知道如何将其部署到 Web 容器。

常见取值:

  • jar (默认): Java Archive 文件,包含编译后的 .class 文件、资源文件等。
  • war: Web Application Archive 文件,用于打包 Web 应用程序。
  • pom: Project Object Model 文件,表示依赖于一个父项目或聚合项目(BOM - Bill of Materials)。当使用 <scope>import</scope> 来导入另一个 POM 的 <dependencyManagement> 部分时,<type>pom</type> 是必需的。
  • maven-plugin: 表示依赖的是一个 Maven 插件。
    test-jar: 一种特殊的 JAR 类型,包含了可以被其他项目引用的测试类。如果你需要复用某个项目的测试工具类,可以依赖它的 test-jar。
  • ejb, ear: 用于企业级 Java 应用的不同模块。