Maven学习笔记2(坐标和依赖)
1、坐标
Maven坐标为各个构件建立了秩序,任何一个构件都必须明确自己的坐标,一个maven坐标是由一些元素确定的
<groupId>com.alivn.account</groupId>
<artifactId>account-email</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
groupId:定义为maven项目隶属的实际项目,可以相当于为一个项目的顶级。 比如 支付系统
artifactId:maven项目的一个子项目 比如 支付系统下的dao模块
version:当前项目的版本号
packaging:定义该maven项目的打包方式 默认jar
classifier:帮助构建输出一些附属属性,比如account-email.1.0.jar, 借助插件生成account-email.1.0-doc.jar(apiw文档)
2、依赖
每个project根元素下,可以包含节点<dependencies>节点。里面包含了若干依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
<type>jar</type>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>${dependencygroupId}</groupId>
<artifactId>${dependencyartifactId}</artifactId>
</exclusion>
</exclusions>
</dependency>
groupId、artifactId、version是一个引入一个依赖必不可少的元素。
scope:依赖的作用范围 test表示 只在test的代码里面的生效
type:依赖的类型 对应packaging
optional:依赖是否可选。
exclusions:排除依赖,当第二依赖里面依赖了一个不稳定的快照版本的jar时候,存在潜在危险,所以我们应该排除第二依赖里面的那个不稳定版本的依赖,在pom中引用为直接依赖。
3、依赖范围
maven在编译 测试 和运行时会使用三个不同的classpath,会根据以依赖范围处理不同的内容,比如主编译时,不会加入scope为test范围的代码,因为它的依赖范围是test
有以下几种依赖范围
compile:编译依赖范围 默认值 对编译 测试 运行 三种 classpath都有效
test:测试依赖范围 只对测试classpath有效
provided:以提供以来范围,仅对编译和测试有效,运行无效,比如servlet-*jar,运行时 框架有tomcat提供jar
runtime:对测试和运行有效 但编译无效 如JDBC驱动,只在运行的时候决定使用哪个数据库的驱动
system:系统依赖范围,和provided范围一致,但必须通过systemPath显示指定依赖文件
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
<scope>system</scope>
<systemPath>${home}/lib/mysql.rt</systemPath>
</dependency>
4、传递性依赖
A->B ,B->C=》A->C
如果A依赖于B B依赖于C 那么A依赖于C B为A 的第一直接依赖 C为B 的第二直接依赖。
根据scope的依赖范围不同 可以将C于A 的依赖范围 也会有变化 ,具体变化为以下表格 蓝色字体为第一直接依赖 红色字体为第二直接依赖
| 依赖范围 | compile | test | provided | runtime |
| compile | compile | —— | —— | runtime |
| test | test | —— | —— | test |
| provided | provided | —— | provided | provided |
| runtime | runtime | —— | —— | runtime |
5、依赖调解
maven传递依赖为我们带来了很多的方便,但是如果 A->B->C(2.0) A->D->C(1.0) 这个时候会解析 哪个版本的C
maven有两条规则:(当第一条规则 不生效时 使用第二条规则)
1、路径最近者优先 实例中 都是两步 距离是相同的 如果不同则去最近者
2、第一声明者优先 程序中 看B 和C 哪个jar里面的类先被使用,然后解析先被使用的jar的那条线路上的c
6、查看依赖的命令
mvn dependency:list(显示所有已解析的依赖)
mvn dependency:tree(显示依赖树)
mvn dependency:analyze(分析当前项目的依赖)
Maven学习笔记2(坐标和依赖)的更多相关文章
- Maven学习笔记—仓库
Maven仓库 1 什么是Maven仓库 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以成为构件,而Maven通常在某个位置统一的存储所有Maven项目共享的构件,这个统一的位置就是Ma ...
- MAVEN学习笔记之Maven插件的应用(4)
MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...
- MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
- MAVEN学习笔记之基础(1)
MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...
- Maven 学习笔记(二)
前面一文——Maven 学习笔记(一)中已经提到了 pom 的大部分配置,Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给创建来完成,每一个任务都会对应一个插件 ...
- Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- seaJs学习笔记之javascript的依赖问题
之前分别为大家介绍了有关javascript中的冲突和性能问题,今天为大家介绍一下有关javascript中的依赖问题.我们将继续就之前javascript中性能问题继续介绍. 先来回顾一下性能问题的 ...
- Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- MAVEN学习笔记之私服Nexus(2)
MAVEN学习笔记之私服Nexus(2) 私有服务器搭建 Nexus www.snatype.org下载 snatype-work 是默认nexus存储nexus a:将bin添加到环境中 Admin ...
- go微服务框架kratos学习笔记八 (kratos的依赖注入)
目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...
随机推荐
- zookeeper第一篇
它是一个为分布式应用提供一致性服务的软件, 提供的功能包括:配置维护.域名服务.分布式同步.组服务等.
- 网上Java总结
1. 编译 javac 文件名.java 运行 java 文件名 2. Public class 和 class 声明类的区别:public 声明的文件名必须和其类名一 ...
- 利用PIL创建验证码
1. 随机生成rgb 元组 def random_RGB(min, max): return tuple([random.randint(min, max) for i in range(3)])2. ...
- windows集群简单介绍
windows集群简单介绍仔细看过以前网友发表的一些文章,总觉得对windows集群没有详细介绍,我也是借花献佛,引用了一些技术性文档.目前应用最为广泛的集群计算技术可以分为三大类:高可用性集群技术. ...
- Zabbix监控平台3.2.4(二)深入理解zabbix
一,Zabbix Web操作深入 1.1 Zabbix Web下的主机和模版以及监控项的添加方式 (1)创建一个模版 我们所有的功能几乎都是在模版中定义的 我们再点进新创建的模版查看 模版里几乎可 ...
- 解题(DirGraCheckPath--有向图的遍历(深度搜索))
题目描述 对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径. 给定图中的两个结点的指针DirectedGraphNode* a, DirectedGraphNode* b(请不要在意数据类 ...
- docker for ubuntu 18 安装
官网地址: https://docs.docker.com/install/linux/docker-ce/ubuntu/ docker的作用:解决不同机器之间的环境差异问题,方便迁移. 0. 卸载旧 ...
- mysql concat筛选查询重复数据
SELECT * from (SELECT *,concat(field0,field1)as c from tableName) tt GROUP BY c HAVING count(c) > ...
- Ubuntu16.04 git上网速度慢的解决方法.
1.打开网站 IPAddress.com ,输入github.com和github.global.ssl.fastly.net,获取他们的域名对应的ip地址 2.sudo vi /etc/hosts ...
- hbase基础建表语句
在Hadoop目录下的HBASE下执行命令 ./hbase shell 进入hbase环境 创建hbase 数据库表 create "表名", "字段A",&q ...