Maven的依赖和传递性质
1. 引入项目所需jar包
Maven项目直白的一大特点就是一般情况下不需要去自行下载jar包以及目标jar包的依赖包并导入,只需要在去Maven的中央仓库http://mvnrepository.com/搜索目标jar,然后选择版本,并将页面上的maven dependency信息放入pom.xml即可,maven会自动下载相应jar包。 当然如果有代理仓库的话,那就在setting.xml里面配置代理仓库信息,这样就会首先去代理仓库里面查找相应jar包。
2. 依赖:体现在pom.xml的dependency节点
一般maven仓库里面的jar所提供的dependency信息都是只有三个节点:groupId,artifactId和version,如下图所示。

然而大家也能发现创建好maven项目后pom.xml自带的junit的dependency信息可是有4个节点,多出了一个scope节点,而且值为test

scope有几个值可填: test, compile, import, provided,runtime,system. (默认是compile)其含义如下:
test : 测试时候会把这个依赖加进来,编译和打包不会。当然,如果某个jar的scope设置为test,那么项目里src/main/java下面就不能有类引用这个jar,只能在src/test/java里面引用这个jar,否则会报错
compile : 编译和打包的时候都会把这个依赖加进去
provided: 编译和测试的时候会把这个包加进去,但是打包的时候不会加进去。比如web项目的servlet-api.jar
runtime : 在编译的时候不添加这个依赖,测试运行和打包的时候依赖
3。传递
如果引入的某个jar,其pom里面依赖了其它jar包,那么 Maven dependencies(不是pom.xml文件里的dependencies节点)下面会自动添加此jar的其他依赖jar。只会添加scope为complie的jar。
那么问题来了:如果jar包A和B都依赖jar包C,并且A依赖1.0版本的C,B依赖1.1版本的C。这时候如果项目添加了A和B,那么自动引入的C是哪个版本呢?结果是看A和B在pom.xml中的顺序,谁靠前,那么就引入和谁相关的C。也就是A靠前,那么引入1.0版本的C;B靠前,那么引入1.1版本的C。这里面项目和c是属于二级依赖,和A,B是2级依赖。如果项目中也添加1.2版本的C,那么Maven dependencies下面就引入1.2版本的C,因为一级依赖优先于二级依赖
二级依赖也可以排除掉,这就排除了user-log.jar中的commons-logging的依赖。这个一般用在包冲突

4. compile出错:
如果出现Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project learnMaven01: Compilation failure 以及is jre not jdk字样。那么看看你用的jre是jre还是jdk,改成jdk就ok了。仍旧是在项目的properties的java build path中,选择jre library,然后添加jdk。
Maven的依赖和传递性质的更多相关文章
- maven 检查依赖冲突和版本冲突
maven 检查依赖冲突和版本冲突 在项目发布的时候,一般都需要进行依赖冲突检查或者重复类的检查,这个时候我一般会使用下面的两个命令: 1 2 3 mvn -U clean package - ...
- maven入门(8)maven的依赖管理
我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置 依赖可以声明如下: <project> ... <dependenci ...
- maven的依赖特性
若排版紊乱可查看我的个人博客原文地址 maven的依赖特性很多很杂,这里大概总结一下,maven的依赖特性主要是依赖范围和传递依赖,前者会影响后者,这篇文章会介绍传递依赖的传递原则,出现冲突传递依赖默 ...
- 着重基础之—构建工具—Maven的依赖管理
着重基础之—构建工具—Maven的依赖管理 项目构建利器Maven给我们开发人员带来了极大的便利,从繁琐的jar包管理中脱身的程序员终于可以有时间再进入另一个坑了. 我今天要给大家分享的内容是我在实际 ...
- Maven快速入门(五)Maven的依赖管理
前面我们讲了maven项目中的最重要的文件:pom.xml 配置文件相关内容.介绍了pom 是如何定义项目,如何添加依赖的jar 包的等. 我们知道,在Maven的生命周期中,存在编译.测试.运行等过 ...
- [转]使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://repo1.maven.org/maven2 。
使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://re ...
- Maven间接依赖冲突解决办法
如果项目中maven依赖太多,由于还有jar之间的间接依赖,所以可能会存在依赖冲突.依赖冲突大部分都是由于版本冲突引起的,查看maven的依赖关系,可以找到引起冲突的间接依赖 如上图,通过Depend ...
- maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)
我们知道,maven的依赖关系是有传递性的.如:A-->B,B-->C.但有时候,项目A可能不是必需依赖C,因此需要在项目A中排除对A的依赖.在maven的依赖管理中,有两种方式可以对依赖 ...
- Maven的依赖范围
Maven的依赖构件包含一个依赖范围属性,这个属性描述的是三套classpath的控制,即编译.测试.运行. 举个例子Junit依赖只是在测试范围(classpath)使用,而在运行的时候不使用,还有 ...
随机推荐
- python 3.5.2 install pillow
1. 首先尝试从官网下载, pip install pillow, 结果网络不行,总是连不上或者下载中就失败, C:\Windows\system32>pip install pillowCol ...
- unlink和close关系
今天看到nginx用文件锁实现互斥的实现方案时,发现,unlink文件后还可需用fd,很是纳闷!于是搜索到此文,并自测了下,涨姿势了~分享给大家~ 原理: 每一个文件,都可以通过一个struct st ...
- 14. Longest Common Prefix
题目: Write a function to find the longest common prefix string amongst an array of strings. Subscribe ...
- October 21st 2016 Week 43rd Friday
Life is too short for long-term grudges. 人生苦短,无暇怨恨. Don't limit yourself. You can go as far as your ...
- 编辑 Ext 表格(一)——— 动态添加删除行列
一.动态增删行 在 ext 表格中,动态添加行主要和表格绑定的 store 有关, 通过对 store 数据集进行添加或删除,就能实现表格行的动态添加删除. (1) 动态添加表格的行 gridS ...
- 【转载】 删除Win10“这台电脑”中的6个文件夹
转载地址:http://www.myxzy.com/post-431.html Windows 8.1/windows 10对比windows 7都有一个变化,打开“这台电脑”(或“我的电脑”)后,“ ...
- [译]:Orchard入门——媒体文件的添加与管理
原文链接:Adding and Managing Media Content 注:此文内容相对较老,实际操作指导性不强,仅适合做研究 当你利用富文本编辑器上传图片时(或者使用XML-RPC客户端,例如 ...
- linux安装open block chain
Compile the source code Step 1. 安装git sudo apt-get install git Step 2. 安装vagrant(ubuntu系统) 下载地址https ...
- C++ 数字转换为string类型
经常需要循环读入多组序号的图像,需要将int转换为string,简单的函数代码如下: #include <sstream>#include <string> string In ...
- B站开源ijkplayer 等多个项目
弹幕视频网 Bilibili(B 站)近日在 GitHub 网站上建立了开源工作组(BOSTF),用以分享与维护自己的开源项目,其中包括 DanmakuFlameMaster(燃烧吧!烈焰弹幕使)与 ...