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的具体清单 版本冲突时的一些规则 何为依赖调节 参 ...
随机推荐
- vuex写法
<template> <div class="hello"> <p>{{count}}</p> <p> <butt ...
- jQuery 实例
选择器 $(this).hide() 隐藏当前的 HTML 元素. $("p").hide() 隐藏所有 <p> 元素. $(".test").hi ...
- Ubuntu安装时没注册root用户密码,怎么登录root
一.其实我个人认为这没有多大必要,因为当你需要 root 的权限时,使用 sudo 便可以了.如果你实在需要在 Ubuntu 中启用 root 帐号的话,那么不妨执行下面的操作: 1.重新设置 roo ...
- sqlserver 2008 还原数据库时,提示有用户正在使用,无法取得使用占有权
sqlserver 2008 还原数据库时,提示有用户正在使用,无法取得使用占有权 这个时候,只需要把数据库分离出去,再附加,然后还原即可 分离数据库的时候能看到有几个数据连接
- eclipse集成svn进行项目开发
在用eclipse进行项目开发的时候,报了一个错误:switch不支持String的参数.这个问题的原因是因为jre版本低于1.7,而当前的eclipse版本最高只能选1.6,无奈,我只能考虑换ecl ...
- 3DES加密及.NET弱密钥处理
背景 智能pos机开发项目需要指定Key加密某些关键字符串.商定采用3DES加密算法. 实践 网海中很多.NET C#编写3DES加密的函数.采集一段简明.成熟的代码,归置于常用程序集.但当指定Key ...
- 这一周~&&html+css的学习感悟
一周一周过的很快,这个礼拜的学习状态并不是很好,好像每个月都有那么几天学习状态不怎么样.不知道是懈怠了还是怎么了…… 没有辜负上周一开始的目标,4.6号之前我就糊好了篇论文交了上去,不知道结果如何,希 ...
- oracle使用3DES加密
CREATE OR REPLACE PACKAGE dbc_cryptor IS SYSKEY VARCHAR2(16) := '0000000012345678'; SYSIV VARCHAR2(1 ...
- 设置默认Browser
电信A库要求android系统中有多个Browser时,开机自动设置一个默认浏览器,而不用弹出选择框让用户手动选择. 监听开机广播Intent.ACTION_BOOT_COMPLETED, 用Pack ...
- jvm 启动参数设置(转载)
JVM启动参数 http://onlyor.iteye.com/blog/1722413 博客分类: java java java启动参数共分为三类其一是标准参数(-),所有的JVM实现都必须实现这些 ...