Maven 入门 02 - POM文件

版权声明:原创不易,欢迎分享和转载,同时请注明出处,谢谢! https://blog.csdn.net/lijing742180/article/details/84581580

一、POM 文件是什么?

Maven的中心思想即POM文件((Project Object Model)项目对象模型)。

POM文件是以XML文件的形式,描述项目用到的资源,如源码目录、测试代码目录、依赖(用到的外部Jar包)等。

pom.xml 是整个系统的基础组件,位于项目根目录下。

二、Maven 如何使用POM文件?

在这里插入图片描述

上图说明了Maven是如何使用POM文件的,当执行一条Maven命令的时候,会依次进行以下步骤:

1、读取项目根目录下的pom.xml,并根据pom.xml中的描述来执行下一步操作。

2、根据pom.xml中的<dependencies>,下载依赖到本地仓库中。

3、构建生命周期、阶段和目标。

4、构建插件。

三、POM文件的主要组成部分

POM文件描述的是构建“什么”,而不是“如何”构建。 如何构建是取决于Maven的构建阶段和目标。

每一个项目都有一个POM文件,即pom.xml,位于项目的根目录下。

pom.xml 主要包括以下几部分:

3.1 构建生命周期、阶段和目标

Maven的构建过程被分解为构建生命周期、阶段和目标。

<build> -> <phase> -> <goals>

  • 一个构建周期由一系列的构建阶段组成。

  • 每一个构建阶段由一系列的目标组成。

当我们使用一条命令来运行Maven的时候,这条命令就是构建生命周期、阶段或目标的名字。

  • 如果执行的是一个生命周期,该生命周期内的所有构建阶段都会被执行。

  • 如果执行的是一个构建阶段,在预定义的构建阶段中,所有处于当前构建阶段之前的阶段也都会被执行。

3.2 依赖和仓库

<repository> 仓库节点,<dependencies> 依赖节点

Maven执行时,其中一个首要目标就是检查项目的依赖(需要的jar 包)。

如果在本地仓库中不存在该依赖,则Maven会从中央仓库和远程仓库下载并放到本地仓库。(后面会单独讲解怎么修改本地仓库路径、怎么添加远程仓库)

3.3 构建插件

<plugins> 节点

构建插件可以向构建阶段中增加额外的构建目标。

如果Maven标准的构建阶段和目标无法满足项目构建的需求,可以在POM文件里增加插件。

Maven有一些标准的插件供选用,如果需要也可以自己实现插件。

3.4 配置文件

<profiles> 节点

配置文件用于以不同的方式构建项目。

比如,你可能需要在本地环境构建,用于开发和测试,你也可能需要构建后用于开发环境。这两个构建过程是不同的。

在POM文件中增加不同的构建配置,可以启用不同的构建过程。当运行Maven时,可以指定要使用的配置。

四、Maven 项目继承

1、父子工程中的POM

(以下内容中子项目模块的概念是类似的,所以也可以对应的理解为模块

一个项目如果分为多个子项目/模块,一般来讲,父项目有一个POM文件,每一个子项目也有一个POM文件。在这种结构下,既可以一步构建整个项目,也可以各个子项目分开构建。

2、 POM 继承的原理

POM 继承的原理类似于Java中的类继承关系,可以结合理解。

当有多个子项目时,使用 POM 继承可以大大减少配置的工作量。

  • 把多个子项目之间一些共性的东西(比如说类似的配置、相同的jar包等等),定义在父项目的pom.xml文件中。

  • 子项目继承父项目后,在自己的pom.xml中只放自己个性的东西,大大减少了工作量。

  • 默认情况下,所有的Maven pom文件都继承自一个根pom。如果没有显式指定父pom,则该pom文件继承自根pom。

  • 子pom文件的设置可以覆盖父pom文件的设置,只需要在子pom文件里指定新的设置即可。

3、POM继承关系图

在这里插入图片描述

如果要继承根pom以外的pom,需要在子pom中显示地指定父pom。

4、如何显示指定父pom呢?

  • 在子项目的pom.xml起始处设置 <parent> 节点来指定父项目。
    如:
<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">
<modelVersion>4.0.0</modelVersion>

<parent> 指定父pom
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<relativePath>../my-parent</relativePath>
</parent>

<artifactId>my-project</artifactId></project>

五、POM文件字段解析

如下为一个最小化的POM文件示例:

<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">
<modelVersion>4.0.0</modelVersion>

<groupId>com.jenkov</groupId>
<artifactId>java-web-crawler</artifactId>
<version>1.0.0</version>
</project>

1、各字段解析

  • modelVersion:使用的POM模型的版本。

    • 一般选择正在使用的Maven版本一致的版本即可。
    • 版本4.0.0适用于Maven 2和3。
  • groupId:一个组织或者项目(比如开源项目)的唯一ID。一般使用项目的java包的根名称作为group ID。类似com.xxx.xxxx

    • 使用带.分隔符的java包名作为groupId,这一点并不是必须的。
    • 但是,如果按照这样的规范来定义groupId,项目将会位于Maven仓库的结构化目录中,该结构化目录与group ID匹配。每一个.是一个目录分隔符,每一个词都表示一个目录。
    • 比如:group ID为com.jenkov的项目将位于目录MAVEN_REPO/com/jenkov中。目录路径中的MAVEN_REPO表示Maven仓库的路径。
  • artifactId:正在构建的项目的名称。

    • 它也是构建完项目后生成的jar包的文件名的一部分。构建过程的输出,即构建结果,在Maven中称为构件(artifact)。通常它就是一个jar包、war包或者EAR包等等。
  • version:项目的版本号。

    • 可以用来识别项目不同的发行版。
    • 它是artifact ID目录下的子目录名。
    • 它也用作构建结果即jar包名称的一部分。

上文中的groupId,artifactId和version属性,在项目构建后会生成一个jar文件,位于Maven仓库的如下路径中(目录和文件名):MAVEN_REPO/com/jenkov/java-web-crawler/1.0.0/java-web-crawler-1.0.0.jar

上面只是构建maven项目最基本的一些配置,实际开发中,还会增加更多的配置来辅助构建。

猜你喜欢

转载自blog.csdn.net/lijing742180/article/details/84581580
今日推荐