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. 4.EasyUI学习总结(四)——EasyUI组件使用 (通过用户登录来演示dialog、ajax的使用,serialize方法的使用,前后台怎样交互等)

    一.EasyUI组件的简单介绍 详细可看api: http://www.jeasyuicn.com/api/docTtml/index.htm easyUI提供了很多组件让我们使用,如下图所示: 很多 ...

  2. 找出只含有2,3,5因子构成的数的第N个

    https://leetcode.com/problems/ugly-number-ii/ 刚开始,一看题以为用刷选法,但是当数据量大时明显不行.然后感觉用含2,3,5因子的个数当做进制来处理还是不行 ...

  3. VC++ 产生GUID或UUID

    GUID 和 UUID 是一样的,表示全球唯一标识码. 下面是Windows系统中,产生GUID的一种方法(Windows API) char* GUID_Generator() { ] = {}; ...

  4. 【leetcode】Triangle (#120)

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

  5. 事务日志以及虚拟日志文件(VLFs)概述

    Part 1:事务日志 每个 SQL Server 数据库都具有事务日志,用于记录所有事务以及每个事务对数据库所做的修改.必须定期截断事务日志以避免它被填满.但是,一些因素可能延迟日志截断,因此监视日 ...

  6. 关于POI解析Excel文件(03和07版本不同)的问题

    问题描述:在使用poi包进行excel解析时,发现对Excel2003以前(包括2003)的版本没有问题,但读取Excel2007时发生如下异常:org.apache.poi.poifs.filesy ...

  7. psql-08表:触发器

    语句级触发器与行为触发器 //创建一个对student表的操作记录表 create table log( update_time timestamp, //操作时间 db_user varchar(4 ...

  8. Python2 连接MySQL

    先安装MySQL-python yum install -y MySQL-python 测试代码: # -*- coding: utf-8 -*- import os import MySQLdb i ...

  9. ZeroMQ接口函数之 :zmq_msg_init_data - 从一个指定的存储空间中初始化一个ZMQ消息对象的数据

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_init_data zmq_msg_init_data(3) ØMQ Manual - ØMQ/3.2.5 ...

  10. centos使用yum安装软件的时候出现了undefined symbol: CRYPTO_set_locking_callback

    1.问题 在CentOS下使用yum安装软件,结果出现了下面的错误提示: # yum installThere was a problem importing one of the Python mo ...