Maven学习 六 pom.xml文件
java jar包的搜索网址:http://mvnrepository.com/
pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素,这种项目之间的关系分为三种:1:依赖关系,2:继承关系,3:聚合关系
(一)描述项目自身的信息
<modelVersion>4.0.0</modelVersion>
<groupId>com.czbank</groupId>
<artifactId>jarMavenProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
modelVersion:声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的 ,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。
groupId:项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成,如com.mycompany.app生成的相对路径为:/com/mycompany/app
artifactId:构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID 和groupID;在某个特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,Maven 为项目产生的构件包括:JARs,源码,二进制发布和WARs等。
packaging:项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型
version:项目当前版本,格式为:主版本.次版本.增量版本-限定版本号
(二)描述当前项目依赖的关系
就是A项目需要使用B项目打成的包,就是A 项目依赖B项目。在pom.xml文件中,使用<dependencies>与<dependency>来描述
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
</dependencies>
在当前的项目中引入另外一个项目的坐标,使用上面坐标,并且如果A 依赖B,B依赖C,那么在A项目的pom.xml文件中只需要引入B的坐标,A项目也会把B依赖的C项目的包下载到项目中。在pom.xml中配置的依赖包,都可以在项目视图的Maven Dependencies中看到

(三)继承关系
父项目是pom类型,子项目jar或war,如果子项目还是其他项目的父项目,子项目也是pom类型.
有继承关系后,子项目中出现<parent>标签,如果子项目和<groupId>和<version>与父项目项目,在子项目中可以不配置<groupId>和<version>,如果子项目与副项目的版本不一样,可以配置子项目的<version>标签,父项目pom.xml中是看不到有哪些子项目.在逻辑上具有父子
(1)创建父项目
项目的继承关系与类之间的继承关系相似,父项目有的内容,子项目必须有。在创建具有子项目的Maven时,打包方式一定选择pom方式。

创建好打包方式为pom的项目之后,在pom.xml文件加入一个依赖坐标,如下图

加入了依赖的项目坐标,发现项目结构中并没有下载所依赖的包

(2)创建子项目
创建子项目,需要Parent Project处选择父项目的坐标信息

在子项目的pom.xml文件会有一个<parent>标签,标签中的子标签是父项目的坐标信息,如下图

因为子项目的版本号,与公司名称都认为和父项目相同,因此我们看到<groupId>与<version>标签报警告,这个两个标签可以从子项目的pom文件中删除。

在子项目的中,并没有任何的<dependencies>与<dependecy>标签,但是在项目结构中还是有Maven Dependencies,是因为这些依赖的jar包是从父项目中继承过来的

(四)聚合关系
4.1 前提是继承关系.父项目会把子项目包含到父项目中.
4.2 子项目的类型必须是Maven Module而不是maven project
4.3 新建聚合项目的子项目时,点击父项目右键新建Maven Module



4.4 具有聚合关系的父项目,在父项目的pom.xml会使用<modules>标签把子模块包含进来

4.5 在子项目的pom.xml文件中,有<parent>标签

4.6 聚合项目中,父项目和子模块依赖包的管理
一般希望整个项目所有依赖的包,在父项目的pom.xml文件中都放在<dependencyManagement>标签中,这样如果子项目依赖哪一个包,就只需要在自己的pom.xml文件中引入,如果不需要就不引入。并且在子项目中引入父项目管理的依赖包时,在包的坐标中可以去掉<version>标签,包的版本号由父项目统一管理。
如果父项目依赖的包没有放入<dependencyManagement>标签中,那么这些包会被所有的子项目都导入,这样会造成空间的浪费。
<dependencyManagement> 写在父项目
作用:声明可能使用到的所有jar
子项目中只需要有坐标的<groupid>和<artifactid>,<version>继承父项目
在父项目中<properties>把所有版本号进行统一管理
父项目pom.xml文件下:
<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.mavenTest</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 依赖包版本管理 -->
<properties>
<!-- 定义版本号标签,标签名称可以随便起 -->
<spring-web>4.3.3.RELEASE</spring-web>
</properties>
<!-- 父项目管理的依赖包 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<!--引用版本号的值 -->
<version>${spring-web}</version>
</dependency>
</dependencies>
</dependencyManagement> <!-- 父项目中的模块 -->
<modules>
<module>child02</module>
</modules>
</project>
在子项目中的pom.xml文件如下
<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>
<groupId>com.mavenTest</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>child02</artifactId> <dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
</dependencies> </project>
Maven学习 六 pom.xml文件的更多相关文章
- 【maven学习】pom.xml文件详解
环境 apache-maven-3.6.1 jdk 1.8 eclipse 4.7 POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示, ...
- Maven学习总结(十一)——Maven项目对象模型pom.xml文件详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 如何在maven项目的pom.xml文件中添加jar包
在使用maven进行项目开发时,我们需要在pom.xml文件中添加自己所需要的jar包.这就要求我们获取jar包的groupId和artifactId. 我们可以在一些maven仓库上搜索我们所需要的 ...
- maven项目的pom.xml文件详解
<project xmlns="http://maven.apache.org/POM/4.0.0 " 2 xmlns:xsi="http://www.w3.org ...
- 【maven学习】settings.xml文件详解
环境 apache-maven-3.6.1 jdk 1.8 eclipse 4.7 Settings.xml是设置maven参数的配置文件,包含类似本地仓储位置.修改远程仓储服务器.认证信息等配置.p ...
- maven spark Scala idea搭建maven项目的 pom.xml文件配置
1.pom.xml文件配置,直接上代码. <?xml version="1.0" encoding="UTF-8"?> <project xm ...
- Maven快速入门(四)Maven中的pom.xml文件详解
上一章,我们讲了Maven的坐标和仓库的概念,介绍了Maven是怎么通过坐标找到依赖的jar包的.同时也介绍了Maven的中央仓库.本地仓库.私服等概念及其作用.这些东西都是Maven最基本.最核心的 ...
- 解决Maven项目中pom.xml文件报错(Failure to transfer....)的问题
打开pom.xml文件,查看错误,如果错误类型为:Failure to transfer.........之类的,则表明你的pom中依赖的jar包没有完全下载. 解决方法:找到你本地的maven仓库, ...
- 理解maven项目的pom.xml文件中,<scope>标签的作用——作用域以及依赖传递
问题介绍: 在maven项目中,最关键的就是pom.xml这个文件,这个文件是用来导入maven项目依赖的jar包以及一些插件等. 在这个文件中导入jar包使用的标签是<dependency&g ...
随机推荐
- css 之过渡效果
之前写css的效果,都是使用js 来完成的,但是写js比较耗费时间,有时候逻辑不对,还出不来效果,所以也比较烦:所以一些简单的效果,就使用css 来完成会比较好一些,不必耗费太多的精力: 但是写css ...
- faiss索引基于数量级和内存限制的选择
它是一个能使开发者快速搜索相似多媒体文件的算法库.而该领域一直是传统的搜索引擎的短板.借助Faiss,Facebook 在十亿级数据集上创建的最邻近搜索(nearest neighbor search ...
- Linux网络编程学习(十二) ----- 结语
该书提前看完了,重点看了第四章和第六章,第七章以后只是大致浏览了一下,如果以后工作中涉及这一块再仔细研究一下,大概花了二十天的样子,主要了解了进程间的通信方式.socket编程以及五种I/O模式,看的 ...
- python字符串 列表 元组 字典相关操作函数总结
1.字符串操作函数 find 在字符串中查找子串,找到首次出现的位置,返回下标,找不到返回-1 rfind 从右边查找 join 连接字符串数组 replace 用指定内容替换指定内容,可以指定次数 ...
- org.apache.hadoop.security.AccessControlException: Permission denied: user=
这个是权限问题,可以配置下,然后重启hadoop集群解决,目前简单的解决方式是: 在 hdfs-site.xml 总添加参数: <property> <name>dfs. ...
- Java Script 简介
Java Script 简介 JavaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备.JavaScrip ...
- API权限设计总结
最近在做API的权限设计这一块,做一次权限设计的总结. 1. 假设我们需要访问的API接口是这样的:http://xxxx.com/openapi/v1/get/user/?key=xxxxx& ...
- Python数据结构与算法相关问题与解决技巧
1.如何在列表, 字典, 集合中根据条件筛选数据¶ In [1]: from random import randint In [2]: data = [randint(-10,10) for _ ...
- Linux /etc/hosts文件
均为转载 ———————— 1.主机名: 无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号. 公网:IP地址不方便记忆,所以 ...
- 20175126Apollo 20175126《Java程序设计》结队编程项目——四则运算
结队编程项目——四则运算 一.项目需求 自动生成小学四则运算题目(加.减.乘.除)统计正确率 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 需求分析: 生成四则运算:需要使用 ...