Maven-pom.xml全配置详解

125 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

pom(4.0)命名空间(xmlns):maven.apache.org/POM/4.0.0

xsd定义:maven.apache.org/xsd/maven-4…

本文部分内容根据个人经验理解的,若有任何问题,还请指出

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>WebProject</artifactId>
    <packaging>jar</packaging>
    <name>demo</name>
    <version>1.0-SNAPSHOT</version>
    <description>项目描述</description>
    <url>project home page</url>
    <prerequisites>
        <maven>2.0</maven>
    </prerequisites>
    <issueManagement>
        <system>issue系统名称</system>
        <url>issue系统路径</url>
    </issueManagement>
    <ciManagement>
        <system>持续集成系统名称</system>
        <url>持续集成系统url</url>
        <!--配置用于在构建失败时通知开发人员/用户,包括用户信息和通知模式。  -->
        <notifiers>
            <notifier>
                <sendOnError>true</sendOnError>
                <sendOnFailure>true</sendOnFailure>
                <sendOnSuccess>true</sendOnSuccess>
                <sendOnWarning>true</sendOnWarning>
                <address>该配置已废除</address>
                <configuration>
                    <custom>一些列自定义属性</custom>
                </configuration>
            </notifier>
        </notifiers>
    </ciManagement>

    <inceptionYear>记录项目的开始年份,用于生成版权信息</inceptionYear>
    <mailingLists>
        <mailingList>
            <name>名称</name>
            <subscribe>可用于订阅邮件列表的电子邮件地址或链接。如果是一个邮件地址,那么会在生成文档的时候自动生成mailTo信息</subscribe>
            <unsubscribe>取消订阅的邮件列表的电子邮件地址或链接</unsubscribe>
            <post>可用于向邮件列表发送邮件的电子邮件地址或链接。</post>
            <archive>指向URL的链接,您可以在该URL中浏览邮件列表存档。</archive>
            <otherArchives>
                <otherArchive>到可浏览列表存档的备用url的链接。</otherArchive>
            </otherArchives>
        </mailingList>
    </mailingLists>
    <!--关于这个项目的一个提交者的信息。-->
    <developers>
        <developer>
            <id>SCM中开发人员的唯一ID。</id>
            <name>贡献者的全名。</name>
            <email>贡献者的电子邮件地址。</email>
            <url>投稿者主页的URL。</url>
            <organization>贡献者所属的组织。</organization>
            <organizationUrl>组织的URL地址。</organizationUrl>
            <roles>
                <role>角色</role>
            </roles>
            <!--贡献者所在时区 -11 到 12 -->
            <timezone> 8</timezone>
            <!--设置某些属性,没有特定格式-->
            <properties>
                <p1>属性1</p1>
            </properties>
        </developer>
    </developers>
    <!--描述还不是提交者的项目贡献者。-->
    <contributors>
        <!--属性和developer差不多,没有id-->
        <contributor>
        </contributor>
    </contributors>
    <licenses>
        <license>
            <name>许可证的完整合法名称。</name>
            <url>license文本的官方url。</url>
            <distribution>
                <!--这个项目可能被分发的主要方法。repo:可以从Maven存储库下载;manual:用户必须手动下载和安装依赖。-->
            </distribution>
            <comments>与本许可证有关的附录信息。</comments>
        </license>
    </licenses>
    <scm>
        <connection>源控制管理系统URL,该url的源库只读。</connection>
        <developerConnection>和connection一样,不过该url针对开发者,源库不是只读。</developerConnection>
        <tag>目前项目使用的tag,默认情况下,开发中是HEAD</tag>
        <url>scm库浏览器访问的url</url>
    </scm>
    <!--项目的开发组织信息。-->
    <organization>
        <name>组织名称</name>
        <url>组织主页 </url>
    </organization>
    <!--构建项目所需的信息。-->
    <build>
        <!--项目资源路径,相对路径-->
        <sourceDirectory>src/main/java</sourceDirectory>
        <!--项目的脚本路径,相对路径-->
        <scriptSourceDirectory>src/main/sql</scriptSourceDirectory>
        <!--测试资源路径-->
        <testSourceDirectory>src/test</testSourceDirectory>
        <!--项目输出路径-->
        <outputDirectory>target/classes</outputDirectory>
        <!--测试输出路径-->
        <testOutputDirectory>target/test-classes</testOutputDirectory>
        <!--build的拓展信息-->
        <extensions>
            <extension>
                <groupId>com.aliyun</groupId>
                <artifactId>quotas20200510</artifactId>
                <version>1.0.1</version>
            </extension>
        </extensions>
        <defaultGoal>项目的默认目标</defaultGoal>
        <!--所有资源路径-->
        <resources>
            <resource>
                <!--资源的存储路径-->
                <directory>src/main/resources</directory>
                <!--包含的文件-->
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <!--排除的文件-->
                <excludes>
                    <exclude>**/*.doc</exclude>
                </excludes>
                <!--资源需要打包到哪儿-->
                <targetPath>org/apache/maven/messages</targetPath>
                <!--是否使用过滤,默认false,true则使用filters的properties进行过滤-->
                <filtering>false</filtering>
            </resource>
        </resources>
        <testResources>
            <!--测试用的资源路径,与resources一致配置-->
        </testResources>
        <!--放置构建生成的所有文件的目录。-->
        <directory>target/generated-sources</directory>
        <!--打包生成的文件名称,默认是${artifactId}-${version}-->
        <finalName>${artifactId}-${version}</finalName>
        <!--启用filtering时的筛选器属性列表-->
        <filters>
            <filter>没有固定格式的文件列表</filter>
        </filters>
        <!--构建时需要的插件-->
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>artifactId</artifactId>
                    <version>version</version>
                    <!--一些其他属性配置-->
                </plugin>
            </plugins>
        </pluginManagement>
        <!--和pluginManagement配置一样,不知所以-->
        <plugins>
        </plugins>
    </build>
    <!--一个项目本地构建概要文件的列表,它将在激活时修改构建过程。-->
    <profiles>
        <profile>
            <id>build profile的唯一标识</id>
            <!--自动触发包含该概要文件的条件逻辑。  -->
            <activation>
                <!--指定此配置文件是否默认激活的标志。-->
                <activeByDefault>false</activeByDefault>
                <!--指定当检测到匹配的JDK时将激活此配置文件。比如配置1.8,那么当项目使用jdk1.8的时候启动该构建过程,!1.8则匹配除1.8以外的所有版本-->
                <jdk>1.8</jdk>
                <!--指定当检测到匹配的操作系统属性时激活此配置文件。-->
                <os>
                    <name>${os.name}</name>
                    <!--操作系统类型-->
                    <family>windows</family>
                    <!--用于激活概要文件的操作系统的体系结构。-->
                    <arch/>
                    <!--操作系统版本-->
                    <version>10.1</version>
                </os>
            </activation>
        </profile>
    </profiles>
    <!--该项目的子模块信息-->
    <modules/>
    <!--配置远程仓库和拓展-->
    <repositories>
        <repository>
            <id>仓库的唯一标识</id>
            <url>仓库的url</url>
            <name>仓库的名称</name>
            <!--如何处理从这个存储库下载releases版本-->
            <releases>
                <!--是否启用 -->
                <enabled>true</enabled>
                <!--更新策略,always,daily(默认),interval:XXX,never(仅在本地不存在的情况下)-->
                <updatePolicy>always</updatePolicy>
                <!--校验失败时的策略,ignore,fail,warn(默认值)-->
                <checksumPolicy>warn</checksumPolicy>
            </releases>
            <!--如何处理从这个存储库下载快照。配置参考releases-->
            <snapshots>

            </snapshots>
            <!--此存储库用于定位和存储工件的布局类型,legacy或default-->
            <layout>default</layout>
        </repository>
    </repositories>
    <!--插件的仓库配置-->
    <pluginRepositories>
        <pluginRepository>
            <id>仓库的唯一标识</id>
            <url>仓库的url</url>
            <name>……</name>
        </pluginRepository>
    </pluginRepositories>
    <!--可以在整个POM中作为替代使用的属性,如果启用,则用作资源中的过滤器。-->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!--版本信息,可以通过parent自动寻找依赖,maven2开始,可以指定范围-->
            <version>2.3.12.RELEASE</version>
            <!--依赖的类型,默认是jar,还有war,ejb-client,test-jar等,更多的类型可以由extensions定义。-->
            <type>jar</type>
            <!--依赖的分类器。这允许区分属于同一个POM但构建方式不同的两个工件,并在版本之后添加到文件名中。[不是很明白]-->
            <classifier>jdk14</classifier>
            <!--定义该依赖的生命周期;compile,runtime,test,system,provided-->
            <scope>compile</scope>
            <!--当scope为system时启用,该属性不推荐使用,该属性可能会在后面的版本中被替换。该属性指定依赖在文件系统上得路径,需要绝对路径-->
            <systemPath>/HOME</systemPath>
            <!--从依赖中排除的引用-->
            <exclusions>
                <exclusion>
                    <groupId></groupId>
                    <artifactId></artifactId>
                </exclusion>
            </exclusions>
            <!--指示要使用此库,依赖项是可选的。默认是false,如果是true,则本项目作为依赖被引用时,该依赖不会被加载-->
            <optional>false</optional>
        </dependency>
    </dependencies>
    <!--定义maven站点上生成报告的规范,在执行mvn site时使用-->
    <reporting>
        <!--默认false,如果为true,那么默认的报告不会包含在生成报告中-->
        <excludeDefaults>false</excludeDefaults>
        <!--报告输出目录,默认是${project.build.directory}/site-->
        <outputDirectory>${project.build.directory}/site</outputDirectory>
        <!--生成报告用到的插件-->
        <plugins/>
    </reporting>
    <!--从该文件继承的项目的默认依赖项信息。 可以参考spring-boot-dependencies-->
    <dependencyManagement>
        <dependencies>
        </dependencies>
    </dependencyManagement>
    <!--能够将站点和构件分别部署到远程web服务器和存储库的项目的分布信息。-->
    <distributionManagement>
        <!--将项目部署到远程仓库上所需的信息-->
        <repository>
            <!--仓库的唯一标识符。用来匹配存储库和setting.xml中的配置-->
            <id>repo</id>
            <!--仓库的名称-->
            <name>lwl</name>
            <!--仓库地址-->
            <url>url</url>
            <!--仓库定位和存储组件的布局类型:default、legacy-->
            <layout>default</layout>
            <!--是否为快照分配由时间戳和构建号组成的唯一版本,还是每次使用相同的版本,默认true-->
            <uniqueVersion>true</uniqueVersion>
        </repository>
        <!--配置同上,快照库配置-->
        <snapshotRepository>
            <……>
        </snapshotRepository>
        <!--发布的站点信息-->
        <site>
            <!--站点id,与setting.xml匹配-->
            <id>id</id>
            <name>name</name>
            <url>url</url>
        </site>
        <!--当前项目的下载地址-->
        <downloadUrl>downloadUrl</downloadUrl>
        <!--在组件被移至新的group ID和artifact ID时的重新定位信息-->
        <relocation>
        </relocation>
        <!--该项目在仓库中的状态,默认none,可选值:converted(存储库管理器将其从Maven 1 POM转换而来),partner(直接从合作伙伴Maven 2存储库同步),deployed(是从Maven 2上部署的实例),verified(是否已手工验证为正确和最终)-->
        <status>none</status>
    </distributionManagement>
</project>