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的依赖和传递性质的更多相关文章

  1. maven 检查依赖冲突和版本冲突

    maven 检查依赖冲突和版本冲突   在项目发布的时候,一般都需要进行依赖冲突检查或者重复类的检查,这个时候我一般会使用下面的两个命令:   1 2 3 mvn -U clean package - ...

  2. maven入门(8)maven的依赖管理

    我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明如下: <project> ... <dependenci ...

  3. maven的依赖特性

    若排版紊乱可查看我的个人博客原文地址 maven的依赖特性很多很杂,这里大概总结一下,maven的依赖特性主要是依赖范围和传递依赖,前者会影响后者,这篇文章会介绍传递依赖的传递原则,出现冲突传递依赖默 ...

  4. 着重基础之—构建工具—Maven的依赖管理

    着重基础之—构建工具—Maven的依赖管理 项目构建利器Maven给我们开发人员带来了极大的便利,从繁琐的jar包管理中脱身的程序员终于可以有时间再进入另一个坑了. 我今天要给大家分享的内容是我在实际 ...

  5. Maven快速入门(五)Maven的依赖管理

    前面我们讲了maven项目中的最重要的文件:pom.xml 配置文件相关内容.介绍了pom 是如何定义项目,如何添加依赖的jar 包的等. 我们知道,在Maven的生命周期中,存在编译.测试.运行等过 ...

  6. [转]使用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 ...

  7. Maven间接依赖冲突解决办法

    如果项目中maven依赖太多,由于还有jar之间的间接依赖,所以可能会存在依赖冲突.依赖冲突大部分都是由于版本冲突引起的,查看maven的依赖关系,可以找到引起冲突的间接依赖 如上图,通过Depend ...

  8. maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)

    我们知道,maven的依赖关系是有传递性的.如:A-->B,B-->C.但有时候,项目A可能不是必需依赖C,因此需要在项目A中排除对A的依赖.在maven的依赖管理中,有两种方式可以对依赖 ...

  9. Maven的依赖范围

    Maven的依赖构件包含一个依赖范围属性,这个属性描述的是三套classpath的控制,即编译.测试.运行. 举个例子Junit依赖只是在测试范围(classpath)使用,而在运行的时候不使用,还有 ...

随机推荐

  1. openstack网络(neutron)模式之GRE的基本原理

    neutron网络目的是为OpenStack云更灵活的划分网络,在多租户的环境下提供给每个租户独立的网络环境. neutron混合实施了第二层的VLAN和第三层的路由服务,它可为支持的网络提供防火墙, ...

  2. vim 使用

    vim有三种模式:输入模式,命令模式,底行模式,使用esc进入命令模式,在命令模式下按英文的冒号,进入底行模式:命令行模式下按i进入输入模式.vim编辑文件是将文件内容复制到缓冲区显示在屏幕上. vi ...

  3. SQL的ROW_NUMBER函数

    with tabs as ( select ROW_NUMBER() over(partition by customerID order by totalPrice) as rows,custome ...

  4. 曲线救国:IIS7集成模式下如何获取网站的URL

    如果我们在Global中的Application_Start事件中访问HttpContext.Current.Request对象,如: protected void Application_Start ...

  5. c# 正则表达式用法

    C#正则表达式Regex类的用法 更多2014/2/18 来源:C#学习浏览量:41529 学习标签: 正则表达式 Regex 本文导读:正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串, ...

  6. WCF与Web API 的应用场景

    Web api  主要功能: 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作 请求的回 ...

  7. ibatis.net MVC 单元测试 错误解决方法

    Q1:Unable to load file via resource "SqlMap.config" as resource.Cause : 未能找到文件:"...Te ...

  8. MSSQ调优所需用的语句

    看一下各项指标是否正常,是否有阻塞,这个语句选取了前10个最耗CPU时间的会话语句 [session_id], [request_id], [start_time] AS '开始时间', [statu ...

  9. 好用的px转rem的插件

    一个CSS的px值转rem值的Sublime Text 3自动完成插件. 下载地址: https://github.com/flashlizi/cssrem 安装 下载本项目,比如:git clone ...

  10. Git Merge Commit忘了选分支?数据丢失? 刚刚做的都丢失了?别急!

    1.打开终端,进入到对应的git 目录,也就是你的项目目录. 2.然后输入 git reflog,找到自己commit的版本 3.根据对应的编码输入指令,如:git checkout e53fa44( ...