Maven pom.xml解析

github地址
https://github.com/a18792721831/studyMaven.git
文章列表:
Maven最全知识
[INFO] Generating project in Batch mode
Maven项目的目录结构
Maven仓库解析
Maven pom.xml解析
MVN命令与生命周期
Maven私有仓库的搭建和使用
Maven依赖

Maven pom.xml解析

对于Maven来说,核心的配置只有两个,分别是setting.xmlpom.xml

setting.xml

在Maven的config目录下,有一Maven自己的setting.xml文件。

image-20201026194535681

相关的配置说明如下:

image-20201026194927929

在配置文件中也有说明

image-20201026195415444

当然,Maven和Gradle类似,在跟项目中可以配置整个跟项目的配置,跟项目的配置,全部的子项目共享。

所以,在Gradle中有setting.gradlesetting.gradle在跟项目的路径下。

相对应的,在Maven中也有setting.xmlsetting.xml也在跟项目的路径下。

子项目共享跟项目的配置。

pom.xml

在项目中,有项目自己的配置。

比如在Gradle中是build.gradle,在Maven中就是build.gradle了。

到目前为止,我们现在有三个配置文件:Maven的配置,跟项目的配置,子项目的配置。

那么,这三个项目的优先级是怎么样的呢?

pom.xml > settings.xml(project) > settings.xml(maven)

也就是说,子项目中配置的是优先级最高的,接下来是跟项目的配置,最后是Maven的配置。

  • 项目基础信息配置
  • 项目构建环境配置
  • 项目仓库管理配置
  • 项目依赖管理配置
  • 项目报表信息配置
  • 项目部署分发配置
<?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">
  <!-- 1.项目基本信息配置-->
  <!--父项目的坐标,如果子项目中没有配置相关的信息,那么使用父项目中的配置。
  坐标包括:
  groupID,artifactID和version。-->
  <parent>
    <!--被继承的父项目标识符-->
    <artifactId>studyMaven</artifactId>
    <!--被继承的父项目的全球唯一标识符-->
    <groupId>org.study</groupId>
    <!--被继承的父项目的版本-->
    <version>1.0-SNAPSHOT</version>
    <!--被继承的父项目的pom.xml文件的相对路径。相对路径允许选择一个不同的路劲。默认是../pom.xml。-->
    <relativePath>../pom.xml</relativePath>
  </parent>
  <!--生命项目描述符尊新哪一个POM模型版本。模型本身的版本很少改变,但是依然是必不可少的。-->
  <modelVersion>4.0.0</modelVersion>
  <!--子项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成。-->
  <groupId>org.study</groupId>
  <!--构件的标识符,它和groupId一起唯一标识一个构件。换句话说,同一个groupId下的artifactId不可重复.-->
  <!--构件是项目生产的或者使用的一个东西,Maven为项目产生的构件包括:jar,war,源码和二进制。-->
  <artifactId>study-helloMaven</artifactId>
  <!--子项目的版本.-->
  <version>1.0-SNAPSHOT</version>
  <!--项目产生的构件类型。-->
  <packaging>war</packaging>
  <!--项目的名称,Maven用于生成文档.-->
  <name>study-helloMaven Maven Webapp</name>
  <!-- 项目的主页URL,Maven用于生成文档。-->
  <url>http://www.example.com</url>
  <!--项目的详细描述,Maven产生文档使用。
  可以使用HTML格式描述,类似javaDoc.-->
  <description>study maven project.</description>
  <!--项目创建的年份-->
  <inceptionYear>2020</inceptionYear>
  <!--项目先关的邮件列表信息-->
  <mailingLists>
    <!--项目相关的所有的邮件列表,自动产生的网站引用这些信息.-->
    <mailingList>
      <!--邮件的名称-->
      <name>study</name>
      <!--发送邮件的地址或者链接,如果是邮件地址,创建文档时,mailto:链接会被自动创建-->
      <post>abc@ss.com</post>
      <!--订阅邮件的地址或者链接-->
      <subscribe>def@ss.com</subscribe>
      <!--取消订阅邮件的地址或者链接-->
      <unsubscribe>ghi@ss.com</unsubscribe>
      <!--浏览邮件信息的URL-->
      <archive>http://localhost:8080/</archive>
    </mailingList>
  </mailingLists>
  <!--项目开发者列表-->
  <developers>
    <!--某个项目开发者的信息-->
    <developer>
      <!--SCM李项目开发者的唯一标识-->
      <id>xx</id>
      <!--项目开发者的全名-->
      <name>zz</name>
      <!--项目开发者的email-->
      <email>xx@xx.com</email>
      <!--项目开发者的主页-->
      <url>http://xxx.com</url>
      <!--项目开发者在项目中扮演的角色-->
      <roles>
        <role>user1</role>
        <role>manage1</role>
      </roles>
      <!--项目开发者所属组织-->
      <organization>study</organization>
      <!--项目开发者所属组织的URL-->
      <organizationUrl>http://study.com</organizationUrl>
      <!--项目开发者属性,即时信息处理等等-->
      <properties>
        <dept>XX</dept>
      </properties>
      <!--项目开发者所在的时区-->
      <timezone>+8</timezone>
    </developer>
  </developers>
  <!--项目的其他贡献者列表-->
  <contributors>
    <!--项目的其他贡献者-->
    <contributor>
      <name>zz</name>
      <email>xx@xx.com</email>
      <url>http://www.baidu.com</url>
      <organization>xx</organization>
      <organizationUrl>http://xx.com</organizationUrl>
      <roles>
        <role>xx</role>
      </roles>
      <properties>
        <zz>x</zz>
      </properties>
      <timezone>7</timezone>
    </contributor>
  </contributors>
  <!--项目所以有的License列表.-->
  <licenses>
    <!--项目的license,用于生成项目的web站点的license页面,一些报表等也会用到-->
    <license>
      <!--license用于法律上的名称-->
      <name>Apache2</name>
      <!--官方的license正文页面的URL-->
      <url>http://www.baidu.com</url>
      <!--项目分发的主要方式:repo,可以从Maven库下载;manual,用户必须手动下载和安装依赖-->
      <distribution>repo</distribution>
      <!--关于license的补充信息-->
      <comments>this is the comments</comments>
    </license>
  </licenses>
  <!--SCM(Source Control Management)标签允许你配置你的代码库,供Maven web站点和其他插件使用-->
  <scm>
    <!--SCM的URL,描述了版本库和如何连接到版本库。-->
    <connection>scm:svn:http://svn.xx.com/maven/xxxxx</connection>
    <!--给开发者使用,类似conntecion元素,连接不仅仅只读-->
    <developerConnection>scm:svn:http://svn.xxx.com/xxxx</developerConnection>
    <!--当前代码的标签,开发阶段默认为HEAD-->
    <tag>1</tag>
    <!--指向项目的可浏览SCM库的URL.-->
    <url>http://svn.xxxx.com</url>
  </scm>
  <!--描述项目所属组织的各种属性,Maven产生文档使用-->
  <organization>
    <!--组织的全名-->
    <name>hello</name>
    <!--组织的主页-->
    <url>http://wwww.hello.com</url>
  </organization>

  <!-- 2.项目构建环境配置-->
  <!--描述了项目构建环境中的前提条件-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>
  <!--项目问题管理系统-->
  <issueManagement>
    <!--问题管理系统的名字-->
    <system>jira</system>
    <!--问题管理系统的url-->
    <url>http://jira.xxxx.com</url>
  </issueManagement>
  <!--项目持续集成信息-->
  <ciManagement>
    <!--持续集成系统的名字-->
    <system>jenkins</system>
    <!--持续集成系统的地址-->
    <url>http://jenkins.xx.com</url>
    <!--构建完成时,需要通知的开发者,或者用户拒的配置:包括成功,失败,异常,警告等)-->
    <notifiers>
      <!--配置一个通知-->
      <notifier>
        <!--发布通知的方式-->
        <type>mail</type>
        <!--发生错误时是否通知-->
        <sendOnError>true</sendOnError>
        <!--构建失败时是否通知-->
        <sendOnFailure>true</sendOnFailure>
        <!--构建成功时是否通知-->
        <sendOnSuccess>true</sendOnSuccess>
        <!--构建发生警告时是否通知-->
        <sendOnWarning>true</sendOnWarning>
        <!--通知哪些人-->
        <address>aa@mail.com</address>
        <!--扩展配置-->
        <configuration/>
      </notifier>
    </notifiers>
  </ciManagement>
  <!-- 模块(子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路劲.-->
  <modules>
    <!--模块的名字-->
    <!--
    <module>helloMaven</module>
    -->
  </modules>
  <!--项目的依赖-->
  <dependencies>
    <!--一个依赖-->
    <dependency>
      <!--被依赖的包的标识符-->
      <groupId>junit</groupId>
      <!--被依赖的包的唯一标识符-->
      <artifactId>junit</artifactId>
      <!--被依赖的包的版本-->
      <version>4.11</version>
      <!--被依赖的包的作用范围(子项目,全部项目,测试,系统。。。)-->
      <scope>test</scope>
      <!--依赖的方式-->
      <type>jar</type>
      <!--被依赖的jar包的编译方式-->
<!--      <classifier>jdk11</classifier>-->
      <!--操作系统的路径-->
<!--      <systemPath></systemPath>-->
      <!--计算依赖时,排除的依赖列表-->
      <exclusions>
<!--        <exclusion>-->
<!--          <groupId>org.apache</groupId>-->
<!--          <artifactId>apache</artifactId>-->
<!--        </exclusion>-->
      </exclusions>
      <!--依赖是否是可选依赖-->
      <optional>false</optional>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.yaml</groupId>
      <artifactId>snakeyaml</artifactId>
      <version>1.23</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <!--构建项目需要得到信息-->
  <build>
    <!--项目源码目录,相对路径,相对于pom.xml-->
    <sourceDirectory>src</sourceDirectory>
    <!--项目脚本目录。脚本不会参与编译以,但是当构建完成后,会被拷贝到输出目录。因为脚本是解释执行的,不是编译执行的。-->
    <scriptSourceDirectory>src/main/resources</scriptSourceDirectory>
    <!--单元测试的源码目录-->
    <testSourceDirectory>src/test</testSourceDirectory>
    <!--编译过的应用程序的class文件存放位置-->
    <outputDirectory>.out</outputDirectory>
    <!--单元测试编译后的class文件存放位置-->
    <testOutputDirectory>.out</testOutputDirectory>
    <!--扩展的构建-->
    <extensions>
      <!--扩展的构建-->
      <!--
      <extension>
        <!-扩展的构建的标识符
        <groupId>xx</groupId>
        <!-扩展的构建的唯一符
        <artifactId>xzx</artifactId>
        <!-扩展构建的版本
        <version>1</version>
      </extension>
      -->
    </extensions>
    <!--项目没有规定目标时的默认值-->
    <defaultGoal>succ</defaultGoal>
    <!--项目的资源信息-->
    <resources>
      <!--一类资源-->
      <resource>
        <!--资源文件的目标路径-->
        <targetPath>.target</targetPath>
        <!--是否启用参数-->
        <filtering>false</filtering>
        <!--资源存放的目录,相对pom.xml的路劲-->
        <directory>src/main/resources</directory>
        <!--包含的模式列表-->
        <includes>
          <include>**/*.yaml</include>
        </includes>
        <!--排除的模式列表-->
        <excludes>
          <exclude>**/*.log</exclude>
        </excludes>
      </resource>
    </resources>
    <!--单元测试的资源信息-->
    <testResources>
      <testResource>
        <targetPath>.target</targetPath>
        <filtering>false</filtering>
        <directory>src/test/resources</directory>
        <includes>
          <include>**/*.yaml</include>
        </includes>
        <excludes>
          <exclude>**/*.log</exclude>
        </excludes>
      </testResource>
    </testResources>
    <!--构建产物最终的名字-->
    <finalName>study-helloMaven</finalName>
    <!--项目可以引用的默认插件信息。插件配置项直到被引用,才会被解析或绑定到生命周期。-->
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <!--插件列表-->
      <plugins>
        <!--插件信息-->
        <plugin>
          <!--插件在仓库中的groupId-->
          <groupId>org.apache.tomcat.maven</groupId>
          <!--插件在仓库中的唯一符-->
          <artifactId>tomcat7-maven-plugin</artifactId>
          <!--插件在仓库中的版本-->
          <version>2.2</version>
          <!--是否下载Maven扩展,影响性能-->
          <extensions>false</extensions>
          <!--构建生命周期中执行一组目标配置,可以有多组目标配置,每组目标配置可能不同-->
          <executions>
            <!--一组目标配置-->
            <execution>
              <!--目标配置的标识-->
              <id>1</id>
              <!--绑定构建生命周期阶段-->
              <phase>clean</phase>
              <!--配置的目标值-->
              <goals>
                <goal>run</goal>
              </goals>
              <!--配置传播范围-->
              <inherited>false</inherited>
              <!--DOM对象的配置-->
              <configuration>
                <address>127.0.0.1</address>
                <port>8080</port>
              </configuration>
            </execution>
          </executions>
          <!--项目引入插件需要引入的额外的依赖-->
          <dependencies>
            <dependency>
              <groupId>org.apache</groupId>
              <artifactId>apache</artifactId>
              <version>21</version>
              <scope>provided</scope>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  <!--配置的环境列表-->
  <profiles>
    <!--一个环境-->
    <profile>
      <!--环境id-->
      <id>dev</id>
      <!--profile的条件,是否使用这个环境的判断条件.-->
      <activation>
        <!--环境是否是默认环境-->
        <activeByDefault>false</activeByDefault>
        <!--条件-->
        <jdk>jdk11</jdk>
        <!--环境的os条件-->
        <os>
          <!--os的名字-->
          <name>Linux</name>
          <!--os的组-->
          <family>root</family>
          <!--os的体系-->
          <arch>x64</arch>
          <!--os的版本-->
          <version>7</version>
        </os>
        <!--环境的file条件-->
        <file>
          <!--如果存在文件-->
          <exists>/usr/local/xx.l</exists>
          <!--如果不存在文件-->
          <missing>/usr/local/yy.l</missing>
        </file>
        <!--jdk和os和file任一满足就会使用环境-->
        <!--环境值-->
        <property>
          <!--变量名-->
          <name>x</name>
          <!--变量值-->
          <value>y</value>
        </property>
      </activation>
      <build>
      </build>
    </profile>
  </profiles>
  <!-- 3.项目仓库管理配置-->
  <!--发现依赖和扩展的远程仓库列表-->
  <repositories>
    <!--远程仓库-->
    <repository>
      <!--远程仓库的标识-->
      <id>r1</id>
      <!--远程仓库的名字-->
      <name>release</name>
      <!--远程仓库的url-->
      <url>http://sss.com</url>
      <!--仓库的布局类型-->
      <layout>default</layout>
      <!--如何处理远程仓库发布版本的下载-->
      <releases>
        <!--是否下载该仓库的发布版本-->
        <enabled>false</enabled>
        <!--更新频率-->
        <updatePolicy>never</updatePolicy>
        <!--Maven验证构件失败时,如何处理(ignore:忽略;fail:失败;warn:警告;)-->
        <checksumPolicy>warn</checksumPolicy>
      </releases>
      <!--如何处理远程仓库快照版本的下载-->
      <snapshots>
        <!--是否下载快照版本-->
        <enabled>false</enabled>
        <!--更新频率-->
        <updatePolicy>never</updatePolicy>
        <!--处理方式-->
        <checksumPolicy>warn</checksumPolicy>
      </snapshots>
    </repository>
  </repositories>
  <!--插件的远程仓库列表,插件用于构建和报表-->
  <pluginRepositories>
    <pluginRepository>
      <id>r2</id>
      <name>xx</name>
      <url>http://cc.xom</url>
      <layout>default</layout>
      <releases>
        <enabled>false</enabled>
        <updatePolicy>never</updatePolicy>
        <checksumPolicy>warn</checksumPolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
        <updatePolicy>never</updatePolicy>
        <checksumPolicy>warn</checksumPolicy>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>
  <!--5.项目报表信息配置-->
  <!--描述产生报表的规范,执行"mvn site",报表就会运行.-->
  <reporting>
    <!--true:不包括默认报表-->
    <excludeDefaults>true</excludeDefaults>
    <!--产生的报表存放在哪里-->
    <outputDirectory>.site</outputDirectory>
    <!--报表插件和相关的配置-->
    <plugins>
      <!--报表插件-->
      <plugin>
        <!--报表插件的groupId-->
        <groupId>org.apache.maven.plugins</groupId>
        <!--报表插件的唯一符-->
        <artifactId>maven-site-plugin</artifactId>
        <!--报表插件的版本-->
        <version>3.3</version>
        <!--是否传播到子项目-->
        <inherited>false</inherited>
        <!--配置项-->
        <configuration/>
        <!--报表的多重规范-->
        <reportSets>
          <!--一个规范-->
          <reportSet>
            <!--id-->
            <id/>
            <!--产生报表时的配置-->
            <configuration/>
            <!--配置是否传播到子项目-->
            <inherited/>
            <!--这个规范用到了哪些报表-->
            <reports/>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>
  <!--6.项目分发配置-->
  <!--项目分发配置,就是执行mvn deploy后将要执行的操作-->
  <distributionManagement>
    <!--部署项目产生的构建发布到远程仓库需要的信息-->
    <repository>
      <!--分配给快照的版本号(唯一)-->
      <uniqueVersion>false</uniqueVersion>
      <id>1</id>
      <name>xx</name>
      <url>ftp://xx.com</url>
      <layout>default</layout>
    </repository>
    <!--构建的快照部署到哪里?默认部署到repository配置的仓库,或者默认仓库-->
    <snapshotRepository>
      <uniqueVersion>false</uniqueVersion>
      <id>1</id>
      <name>xx</name>
      <url>ftp://ss.com</url>
      <layout>default</layout>
    </snapshotRepository>
    <!--部署项目的网站需要的信息-->
    <site>
      <!--部署位置的唯一标识符-->
      <id>xxx</id>
      <!--部署位置的名称-->
      <name>xxxx</name>
      <!--部署位置的URL-->
      <url>scp://svn.baidu.com</url>
    </site>
    <!--项目下载页面的URL,该元素的原因是:帮助定位不在仓库里的构件-->
    <downloadUrl>http://www.baidu.com</downloadUrl>
    <!--如果构件有了新的groupId,artifactId,那么在这里应该列出来-->
    <relocation>
      <groupId>xxxx</groupId>
      <artifactId>xxxx</artifactId>
      <version>xxx</version>
      <message>xxxx</message>
    </relocation>
    <!--是否有效-->
    <status>none</status>
  </distributionManagement>
</project>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值