官网完整配置
<?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 应用的不同模块。