上一章,我们讲了Maven的坐标和仓库的概念,介绍了Maven是怎么通过坐标找到依赖的jar包的。同时也介绍了Maven的中央仓库、本地仓库、私服等概念及其作用。这些东西都是Maven最基本、最核心的概念,大家一定要搞明白。所谓工欲善其事必先利其器,这些基础的东西一定要掌握。其实,Maven项目中还有一个最核心的文件:pom.xml 文件。pom.xml 文件是Maven项目中的核心项目管理文件,用于项目描述、依赖管理、构建信息管理、组织信息管理等。pom.xml 文件中包含了许多标签。接下来介绍一些Maven常用的标签。

一、pom.xml 常用元素

1、坐标信息

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

(1)<groupId>:定义当前 Maven 项目所属的实际项目,跟 Java 包名类似,通常与域名反向一一对应。
(2)<artifactId>:定义当前 Maven 项目的一个模块名,默认情况下,Maven 生成的构件,其文件名会以 artifactId 开头,如 hibernate-core-3.6.5.Final.jar。
(3)<version>:定义项目版本,通常是0.0.1.snapshot,分为snapshot(快照),alpha(内部测试),beta(公测),Release (稳定版),GA (正式版)等。
(4)<packaging>:定义项目打包方式,如 jar,war,pom,zip ……,默认为 jar。

项目中pom.xml 文件中定义:

2、依赖列表

依赖列表包含<dependancies>和<dependancy> 标签

<dependancy> 是pom.xml 文件中非常重要的标签。声明项目依赖哪些 jar 包以及 所依赖jar 的坐标等信息。

<dependency>
  <groupId></groupId>
  <artifactId></artifactId>
  <version></version>
  <scope></scope>
  <optional></optional>
  <exclusions></exclusions>
</dependency>

如上面中示例中:

(1)<groupId>和<artifactId>  为jar包的坐标信息,确定依赖的jar包的位置。

(2)<version>  为jar 包对应的版本。

(3)<scope>  指依赖的范围,主要包含:

    compile(编译范围):默认的scope,运行期有效,需要打入包中
    provided:编译期有效,运行期不需要提供,不会打入包中
    runtime:编译不需要,在运行期有效,需要导入包中。(接口与实现分离)
    test:测试需要,不会打入包中
    system:非本地仓库引入、存在系统的某个路径下的jar。(一般不使用)

  <scope> 非常重要,也非常难懂接下来我会专门讲maven的依赖范围。

(4)<optional>  设置依赖是否可选,有true和false,默认是false。

(5)<exclusions> 排除依赖传递列表。

3、依赖管理

依赖管理 <dependencyManagement> 主要作用是管理子项目的公共的依赖。

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

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

这样, 就能统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,保证测试的和发布的是相同的程序。

4、<parent> 和 <modules>

(1)<parent> 通常用于子模块中,对父模块中pom的继承。类似上面提到的,一般我们会将一些公共的jar包定义在父工程,然后子模块则通过<parent>标签基础相关的pom依赖。

假如一个项目有三个模块,它们都需要用到同一个jar包:common.jar。我们分别在三个项目的pom.xml 文件中定义各自对common.jar的依赖,那么当common.jar的版本发生变化时,三个项目的pom文件都要改,项目模块越多要改的地方就越多。这时候就需要用到<parent> 标签, 我们创建一个parent项目,打包类型为pom,parent项目中不存放任何代码,只是管理多个项目之间公共的依赖。在parent项目的pom文件中定义对common.jar的依赖,ABC三个子项目中只需要定义<parent></parent>,parent标签中写上parent项目的pom坐标就可以引用到common.jar了。

(2)<modules> 用来聚合多个maven 模块,假如我们项目中有多个模块,那么通过<modules> 标签将这些子模块聚合,统一编译。

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

<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.</modelVersion> <groupId>com.youzhibing.account</groupId>
<artifactId>account-aggregator</artifactId>
<version>1.0.-SNAPSHOT</version>
<packaging>pom</packaging> <name>Account Aggrregator</name>
<url>http://maven.apache.org</url> <modules>
    <!-- 模块都写在此处 -->
<module>account-register</module> <module>account-login</module>
</modules> </project>

最后

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

Maven快速入门(四)Maven中的pom.xml文件详解的更多相关文章

  1. Maven pom.xml文件详解

    Maven pom.xml文件详解 一.简介 POM全称是Project Object Model,即项目对象模型. pom.xml是maven的项目描述文件,它类似与antx的project.xml ...

  2. 史上最全的maven的pom.xml文件详解(转载)

    此文出处:史上最全的maven的pom.xml文件详解——阿豪聊干货 <project xmlns="http://maven.apache.org/POM/4.0.0" x ...

  3. [转]Maven的pom.xml文件详解

    Maven的pom.xml文件详解------Build Settings 2013年10月30日 13:04:01 阅读数:44678 根据POM 4.0.0 XSD,build元素概念性的划分为两 ...

  4. 【maven学习】pom.xml文件详解

    环境 apache-maven-3.6.1 jdk 1.8 eclipse 4.7 POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示, ...

  5. 史上最全的maven的pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  6. Maven项目pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. [maven] pom.xml 文件详解

    参考资料: http://blog.csdn.net/uohzoaix/article/details/7035307 http://www.cnblogs.com/qq78292959/p/3711 ...

  8. maven的pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  9. 最全的maven的pom.xml文件详解

    pom.xml代码: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...

随机推荐

  1. Skill 脚本演示 ycBusNet.il

    https://www.cnblogs.com/yeungchie/ ycBusNet.il 用于原理图中按照一定格式,批量创建 Bus . 回到目录

  2. CF R 632 div2 1333D Challenges in school №41

    LINK:Challenges in school №41 考试的时候读错题了+代码UB了 所以wa到自闭 然后放弃治疗. 赛后发现UB的原因是 scanf读int类型的时候 宏定义里面是lld的类型 ...

  3. Golang | Go语言多态的实现与interface使用

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第11篇文章,我们一起来聊聊golang当中多态的这个话题. 如果大家系统的学过C++.Java等语言以及面向对象的 ...

  4. Oracle APEX 发送邮件

    1.网络服务安全设置 Oracle 11gR2的版本,可能导致邮件发送失败(ORA-24247: network access denied by access control list (ACL)) ...

  5. Spring Security学习笔记一

    一.使用Spring Security 1.在pom 文件中添加Spring Security的依赖. <dependency> <groupId>org.springfram ...

  6. Python selenium爬虫实现定时任务过程解析

    现在需要启动一个selenium的爬虫,使用火狐驱动+多线程,大家都明白的,现在电脑管家显示CPU占用率20%,启动selenium后不停的开启浏览器+多线程, 好,没过5分钟,CPU占用率直接拉到9 ...

  7. 《笨办法学Python 3》python入门书籍推荐|附下载方式

    <笨办法学Python 3>python入门书籍免费下载 内容简介 本书是一本Python入门书,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用.这本书以习题的方式引导读 ...

  8. UIAutomator环境Android8.0 环境异常解决

    个人PC环境 ANDROID_HOME:F:\1Study\Andriod\51zxw_2018-0102\Sdk ANT_HOME:D:\ant\apache-ant-1.10.5\ CLASSPA ...

  9. SSH config语法关键字

    1.SSH config 语法关键字 host 别名 HostName 主机名(ip) User    用户(root就是一个用户) Port 端口(默认22) IdentityFile 密钥文件的路 ...

  10. 2020-06-15:Redis分布式锁怎么解锁?

    福哥答案2020-06-15: 答案来自群成员:1.setnx:del2.set:lua+del3.redisson:@Overridepublic void unlock(String lockKe ...