maven依赖管理
maven依赖管理
1.依赖范围 (依赖相当于java中的import 是否需要导入别的jar包)
使用控制依赖与三种classpath(编译期,测试时期,运行时期)的关系

complie 在编译,测试,运行时期,a项目在编译期依赖b,并且在测试和运行时期也依赖b项目, (默认值) 会打jar包或者war包
test 只在测试时有效, a项目只在测试时依赖b项目, 不会打jwar包
provided 在编译和测试是有效,在运行时不会打jar或war包
runtime 会在测试时和运行时进行打包处理,(会打war包)
2.依赖传递

a----->b 第一关系:a依赖b compile
b----->c 第二关系:b依赖c complie
1.纵坐标, 直接依赖
a---->b a依赖b 那么b就是a的直接依赖
在a的pom.xml中添加b的坐标
2横坐标, 传递依赖
b----->c b依赖c 那么c就是a的传递依赖
3.中间依赖
传递依赖的范围 a依赖c的范围
3.依赖调节原则
情景再现:
项目 A 依赖于项目 B,项目 B 依赖于项目 C(v1), 项目 A 依赖于项目 D,项目 D
依赖于项目 E,项目 E 依赖于 C(v2),
1、A--->B---->C(v1) ,
2、A------>D---->E----->C(v2)
项目 A 隐形依赖了两个版本的 C,那到底采用哪个版本呢?
依赖调节第一原则: 路径优先
很明显,第一种路径深度是 3,第二种路径深度是 4,所以,maven 会采用 C(v1)
依赖调节第二原则: 声明优先
假设路径深度相等,那么声明在前的会被引用。
4.版本锁定
在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。
pom.xml 文件中,jar 的版本判断的两种途径
1. 如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven
就会倒 dependencyManagement 里面去找有没有对该 artifactId 和 groupId 进行过
版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为 dependency
声明一个 version。
2. 如果 dependencies 中 的 dependency 声 明 了 version , 那 么 无 论
dependencyManagement 中有无对该 jar 的 version 声明,都以 dependency 里的
version 为准。
5.排除依赖
我们仔细观察 Maven Dependencies 下的 jar 包,会发现存在了两个 javassist
包,一个是 javassist-3.18.1-GA. ,另一个是 javassist-3.11.0-GA 。这是因为我
们引入三大框架的 jar 包,hibernate 依赖 javassist-3.18.1-GA ,而 struts 依赖
javassist-3.11.0-GA 。这就是我们通常所说的 jar 包版本冲突,如果这两个 jar 包
同时存在,会导致后续某些操作会存在问题(比如 openSessionInView 失效),
所以需要排除低版本的 jar 包。
如何来排除依赖呢?添加下面红色字体的部分。作用是排除 struts 中依赖的
javassist 的 jar
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.24</version>
<exclusions>
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
添加后发现 javassist-3.11.0-GA 消失。
maven依赖管理的更多相关文章
- Java-Maven-Runoob:Maven 依赖管理
ylbtech-Java-Maven-Runoob:Maven 依赖管理 1.返回顶部 1. Maven 依赖管理 Maven 一个核心的特性就是依赖管理.当我们处理多模块的项目(包含成百上千个模块或 ...
- maven 学习---Maven依赖管理
其中一个Maven的核心特征是依赖管理.管理依赖关系变得困难的任务一旦我们处理多模块项目(包含数百个模块/子项目). Maven提供了一个高程度的控制来管理这样的场景. 传递依赖发现 这是很通常情况下 ...
- 【Tool】Windows系统安装Maven依赖管理工具
安装Maven依赖管理工具 官网下载地址:http://maven.apache.org/download.cgi 系统环境要求: [JDK]Maven3.3版本+需要JDK1.7版本以上支持 [内存 ...
- 【第十五篇】- Maven 依赖管理之Spring Cloud直播商城 b2b2c电子商务技术总结
Maven 依赖管理 Maven 一个核心的特性就是依赖管理.当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难.针对此种情形,Maven 提供了 ...
- Gradle Maven 依赖管理
仓库管理简介 本质上说,仓库是一种存放依赖的容器,每一个项目都具备一个或多个仓库. Gradle支持以下仓库格式: Ivy仓库 Maven仓库 Flat directory仓库 我们来看一下,对于每一 ...
- Spring Security 3.2.x与Spring 4.0.x的Maven依赖管理
原文链接: Spring Security with Maven原文日期: 2013年04月24日翻译日期: 2014年06月29日翻译人员: 铁锚 1. 概述 本文通过实例为您介绍怎样使用 Mave ...
- maven——依赖管理
管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包:如何解析 jar 包依赖:包冲突是如何产生:如何解决包冲突:依赖管理解决什么问题:什么是依赖范围:使用包依赖的最佳实践等 6 个问 ...
- Maven学习(十八)-----Maven依赖管理
其中一个Maven的核心特征是依赖管理.管理依赖关系变得困难的任务一旦我们处理多模块项目(包含数百个模块/子项目). Maven提供了一个高程度的控制来管理这样的场景. 传递依赖发现 这是很通常情况下 ...
- Maven依赖管理之BOM
目录 什么是BOM 一个BOM的格式 怎么使用BOM 通过parent引用 通过dependencyManagement引用 怎么查看依赖的某个BOM的具体清单 版本冲突时的一些规则 何为依赖调节 参 ...
随机推荐
- 解决video标签在微信中强制全屏、微信全屏播放(Android和IOS)
在video标签中加上代码: x5-playsinline="true" webkit-playsinline="true" playsinline=" ...
- Linux移植之auto.conf、autoconf.h、Mach-types.h的生成过程简析
在Linux移植之make uImage编译过程分析中分析了uImage文件产生的过程,在uImage产生的过程中,顺带还产生了其它的一些中间文件.这里主要介绍几个比较关键的文件 1.linux-2. ...
- C# devexpress gridcontrol 分页 控件制作
这个小小的功能实现起来还是有一点点复杂, 分页单独一个usercontrol 出来,导致查询换页 与gridcontrol页面分离, 一般通过换页事件通知girdcontrol 做出查询 查询来说有 ...
- 4. 深入 Python 流程控制
除了前面介绍的 while 语句,Python 还从其它语言借鉴了一些流程控制功能,并有所改变. 4.1. if 语句 也许最有名的是 if 语句.例如: >>> x = int(i ...
- C# 判断ip地址是否正确
最后要用一方法判断ip地址是否正确,直接用.Net现成的类,方法如下: string ipStr="192.168.222.333"; IPAddress ip; if(IPAdd ...
- C# oracle to_date 日期型 参数传值
C#操作oracle,date字段,使用参数传值 例子一,获取三小时前的记录 public static DataTable Query() { const string sSql = &qu ...
- numpy常见属性、创建数组
1.几种常见numpy的属性 ndim:维度 shape:行数和列数 size:元素个数 >>> import numpy as np #导入numpy模块,np是为了使用方便的 ...
- iOS.ARM-Assembly
ARM Assembly for iOS with Xcode 0. Introduction 0.1 arm asm vs. arm64(ARMv8) asm AArch64: 0.2 __arm6 ...
- sqli-labs:17,增删改
增 insert into users values(','lcamry','lcamry'); 删 delete from users where id=16 删数据库:drop database ...
- Capacity To Ship Packages Within D Days LT1011
A conveyor belt has packages that must be shipped from one port to another within D days. The i-th p ...