超级详细的Maven教程(四)Maven核心配置文件:pom.xml详解

简介: Maven项目中有一个最核心的文件:pom.xml 文件。pom.xml 文件是Maven项目中的核心项目管理文件,用于项目描述、依赖管理、构建信息管理、组织信息管理等。pom.xml 文件中包含了许多标签。接下来介绍一些Maven常用的标签。

上一章,我们讲了Maven的坐标和仓库的概念,介绍了Maven是怎么通过坐标找到依赖的jar包的。同时也介绍了Maven的中央仓库、本地仓库、私服等概念及其作用。这些东西都是Maven最基本、最核心的概念,大家一定要搞明白。


所谓工欲善其事必先利其器,这些基础的东西一定要掌握。其实,Maven项目中还有一个最核心的文件:pom.xml 文件。pom.xml 文件是Maven项目中的核心项目管理文件,用于项目描述、依赖管理、构建信息管理、组织信息管理等。pom.xml 文件中包含了许多标签。接下来介绍一些Maven常用的标签。


一、文件结构

Maven项目根目录下的pom.xml文件是Maven项目中非常重要的配置文件。主要描述项目包的依赖和项目构建时的配置。pom.xml配置文件主要分4部分,分别是:

  • 项目的描述信息
  • 项目的依赖配置信息
  • 构建时需要的公共变量
  • 构建配置


下面就来一一介绍pom.xml文件各个组成部分以及它们的作用。


二、各部分说明

1. 项目的描述信息

pom.xml中最重要的就是项目的坐标信息,主要包含之前介绍的:<groupId>、<artifactId>、<version>、<packaging>等标签。pom.xml 文件中定义如下:

<groupId>com.wei</groupId>
<artifactId>hello</artifactId>
<version>2.0.5.RELEASE</version>
<packaging>jar</packaging>
<name>hello</name>
<description>Demo project for Spring Boot</description>

上面的配置内容基本是创建项目时定义的有关项目的基本描述信息,其中比较重要的是groupIdartifactId。各个属性说明如下:

  • groupId:项目的包路径。
  • artifactId:项目名称。
  • version:项目版本号。
  • packaging:一般有jarwar两个值,表示使用 Maven打包时是构建成JAR包还是WAR包。
  • name:项目名称。
  • description:项目描述。

2. 项目的依赖配置信息

此部分为项目的依赖信息,主要包括Spring Boot的版本信息和第三方组件的版本信息。示例代码如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

上述描述项目的依赖信息主要分为parentdependencies两部分。

  • parent:配置父级项目的信息。Maven支持项目的父子结构,引入后会默认继承父级的配置。此项目中引入spring-boot-starter-parent 定义Spring Boot的基础版本。
  • dependencies:配置项目所需要的依赖包,Spring Boot体系内的依赖组件不需要填写具体版本号,spring-boot-starter-parent维护了体系内所有依赖包的版本信息。
  • dependency:Maven项目定义依赖库的重要标签,通过groupIdartifactId等“坐标”信息定义依赖库的路径信息。
  • scope:指依赖的范围, 非常重要,也非常难懂接下来我会专门讲maven的依赖范围。主要包含:            

    compile(编译范围):默认的scope,运行期有效,需要打入包中

    provided:编译期有效,运行期不需要提供,不会打入包中

    runtime:编译不需要,在运行期有效,需要导入包中。(接口与实现分离)

    test:测试需要,不会打入包中

    system:非本地仓库引入、存在系统的某个路径下的jar。(一般不使用)

  • optional:设置依赖是否可选,有true和false,默认是false。
  • exclusions:排除依赖传递列表。


此外,Maven的项目支持父子继承,子项目的pom文件继承父项目的pom文件中的配置。

假如某个的模块很多,一些公共的jar包,每个模块都需要引用一遍很麻烦。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。所以如果抽象出一个父工程来管理子项目的公共的依赖。


在我们项目顶层的pom文件中,我们会看到《dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

image.png

如上图所示,我们可以通过<modules> 来聚合多个maven 模块,假如我们项目中有多个模块,那么通过<modules> 标签将这些子模块聚合,统一编译。

假如我们的项目分成了好几个模块,那么我们构建的时候是不是有几个模块就需要构建几次了(到每个模块的目录下执行mvn命令)?当然,你逐个构建没问题,但是非要这么麻烦的一个一个的构建吗,那么简单的做法就是使用聚合,一次构建全部模块。


3. 构建构建时需要的公共变量

这里面定义pom中的公共变量:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

上面配置了项目构建时所使用的编码,输出所使用的编码,最后指定了项目使用的JDK版本。


4. 构建配置

此部分为构建配置信息,这里使用Maven构建Spring Boot项目,所以必须需要在<plugins>中添加 spring-boot-maven-plugin 插件,它能够以Maven的方式为应用提供Spring Boot的支持。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

配置spring-boot-maven-plugin构建插件,将Spring Boot应用打包为可执行的JARWAR文件,然后以简单的方式运行Spring Boot应用。如果需要更改为Docker相关的配置,则只要更改此部分即可。



最后

以上,就把Maven项目中的pom文件的常用标签介绍完。磨刀不误砍柴工,pom.xml 文件虽然简单,但是还是必须牢牢掌握。接下来会讲Maven 中最重要,也是最麻烦的依赖关系。




相关文章
|
3月前
|
XML JavaScript API
Ruby 教程 之 Ruby XML, XSLT 和 XPath 教程 3
Ruby XML, XSLT 和 XPath 教程
33 1
|
3月前
|
XML JavaScript API
Ruby 教程 之 Ruby XML, XSLT 和 XPath 教程 2
Ruby XML, XSLT 和 XPath 教程
26 0
|
2月前
|
Web App开发 Java 测试技术
《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程)
【2月更文挑战第13天】《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程) 上一篇文章,宏哥已经在搭建的java项目环境中实践了,今天就在基于maven项目的环境中给小伙伴们 或者童鞋们演示一下。
66 1
|
4月前
|
安全 Java Linux
一文了解 Maven 的 settings.xml 配置文件
一文了解 Maven 的 settings.xml 配置文件
238 0
|
3天前
|
Java 测试技术 项目管理
Java基础教程(22)-构建工具Maven的基本使用
【4月更文挑战第22天】Maven是Java项目管理及构建工具,简化构建、测试、打包和部署等任务。遵循约定优于配置原则,核心是`pom.xml`配置文件,用于管理依赖和项目信息。安装涉及下载、解压、配置环境变量。在IDEA中使用Maven创建项目,通过`pom.xml`添加依赖和管理版本。常用命令包括`clean`、`compile`、`test`、`package`、`install`和`deploy`。IDEA支持直接执行这些命令。
|
6天前
|
Java Apache Maven
Maven 教程
Maven是一个由Apache开发的项目管理工具,基于POM概念,用于Java项目的构建、依赖管理和文档生成。它支持多种语言,如C#、Ruby等,并设有一套标准目录结构,遵循约定优于配置原则。Maven负责构建、报告、资源管理、发布和分发等工作,并维护一个本地仓库(~/.m2/repository)存储依赖。
|
11天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
13 0
|
25天前
|
Java Maven
SpringMVC常用Maven POM.xml依赖包片段
SpringMVC常用Maven POM.xml依赖包片段
|
2月前
|
Java 数据库连接 mybatis
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
20 1
|
2月前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
15 1