Maven依赖

原创 2016年05月31日 01:26:49
1、依赖有哪些配置?
  • 示例:
<dependency>
<groupId>com.icegreen</groupId>
<!-- GreenMail是开源的邮件服务测试套件 -->
<artifactId>greenmail</artifactId>
<version>1.3.1b</version>
<type>jar</type>
<scope>test</scope>
<optional>true</optional>
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
  • 配置元素解释
groupId、artifactId、version:依赖的基本坐标,每个都有。
type:依赖的类型,对应于项目坐标定义packaging,大部分情况下该元素不必声明,其默认值jar
scope:依赖的范围
optional:标记依赖是否可选,可选依赖
exclusions:用来排除传递性依赖

2、依赖范围的解释?
不同的运行周期需要不同的jar包,依赖不同的文件,为了更有效的使用构建。
依赖范围用来控制依赖与这三种classpath(编译classpath,测试classpath,运行classpath)的关系。
Maven有以下几种依赖范围:
  • compile:编译依赖范围,默认值。
  • test: 测试依赖范围。
  • provided: 已提供依赖范围。使使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子就是servlet-api,编译和测试的时候需要,但在运行项目的时候不需要,由于容器已经提供,就不需要冲入的引入了。
  • runtime:运行时依赖范围。对于测试和运行classpath有效,但在编译主代码时无效。如JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在测试和运行的时候才需要实现JDBC接口的具体实现。
  • system:系统依赖范围。同provided一样,不常用
  • import:导入依赖范围。不会对三种classpath有影响,不常用

3、传递性依赖?什么意思,有哪些特性
A构建(jar)依赖B【第一依赖】,B依赖C【第二依赖】。如果都是默认的compile依赖范围,那么C就是A的一个传递性依赖。
传递性依赖Maven是会自动引入到项目中的。
对比其规律

4、依赖调解,调解肯定是传递性依赖产生冲突了,Maven有哪些原则来解决这些问题。
  • 路径最近者优先(依赖层数最少者优先)
  • 最先声明者优先(传递性依赖中,路径/层数一样,同一个版本最先声明者优先)

5、可选依赖,可选存在于多个特性仅能保存其一的情况,一般情况下不建议这样使用。
项目排除的,例如数据库驱动
<optional>true</optional>

6、Maven依赖技巧:
排除依赖:exclusions
可以包括多个<exclusion></exclusion>
排除的时候,exclusion仅需要groupId和artifactId,不需要version

归类依赖:同一版本,定义一个变量
定义一些全局变量,用<properties></properties>,示例:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
引入全局变量
<dependency>
<encoding>${project.build.sourceEncoding}</encoding>
</dependency>

优化依赖:同优化代码一样,去除多余的依赖,显式的声明某些必要的依赖,工具分析的使用命令。
mvn dependency:list --查看当前项目已解析依赖

mvn dependency:tree --查看已解析的依赖树

mvn dependency:analyze --分析依赖前缀的问题,如下指出 了项目未使用,但是显式声明的依赖

版权声明:本文为博主原创文章,未经博主允许不得转载。

Maven编译多子项目依赖

早在某公司实习的时候就听闻过Maven,只是听大神简单的介绍过,自己没有实习做过。之前做Android 的时候主要是用gradle(不过真心不熟),大概有点知道Maven的作用,这次来深圳某公司实习,...
  • u011579138
  • u011579138
  • 2016年05月03日 11:58
  • 14884

Maven使用总结(二):Maven依赖配置

Maven依赖配置这一篇来聊一聊Maven的依赖配置。
  • yunyun1886358
  • yunyun1886358
  • 2017年01月15日 23:34
  • 2854

maven学习系列7----将依赖依赖文件打包到jar中

在发布项目的时候有可能会有这样的要求,一个jar包中即包含自研的代码,也包含依赖的库(例如log4j的jar包之后的),maven打包的时候有两种方法可以实现这种要求。 1,使用maven-assem...
  • ITsenlin
  • ITsenlin
  • 2016年05月15日 22:47
  • 7328

maven系列--maven添加第三方、本地依赖

一、问题背景  最近在微信公众号开发时遇到一个问题,需要使用一个微信开发框架。处理方式是:手动下载该框架的jar包,再将其作为第三方依赖添加到maven。二、实现方法  声明:该依赖为微信公众号开发框...
  • qq_33429968
  • qq_33429968
  • 2017年06月01日 20:35
  • 1678

maven依赖原则

使用maven的程序员都会遇到一个问题,那就是maven依赖冲突的问题,这会导致ClassNotFound或者MethodNotFound这样的异常。其实只要明白maven依赖的根本性的原则就不怕这样...
  • u011563331
  • u011563331
  • 2016年05月18日 11:11
  • 3012

一场maven循环依赖引发的大案!

简单来说:又是一场循环依赖引发的大案。 A 包依赖了B包, B包依赖了A包,当A包版本从1.0.0升级到2.0.0的时候,A包在编译的时候,去远程仓库下载B包,发现B包依赖A包,遂继续在远程仓库下载...
  • li396864285
  • li396864285
  • 2017年06月12日 19:38
  • 730

eclipse maven工程添加maven dependencis依赖

现象是maven工程大面积的报错,缺少springmvc等包,查看了下,是因为缺少了maven dependencis的依赖 解决方法: 选中工程--》右键--》最后一个pro...
  • u010343544
  • u010343544
  • 2016年12月08日 17:22
  • 5526

maven的依赖传递性讲解

在日常项目中经常会碰到maven依赖问题,尤其是碰到类似struts的jar包升级,每一次都要动很多项目,有些间接依赖会导致,为了搞清楚maven整个依赖qing'kuan 原文引用自:http://...
  • elricboa
  • elricboa
  • 2017年04月16日 23:50
  • 2192

如何查看Maven项目中的jar包依赖树情况?

对于开发人员,我想大家对于Maven应该不会陌生吧,如何在一个Maven项目中对这个项目中所引用的第三方jar包有个直观的了解呢? 其实实现很简单,只需要借助于Maven的一条命令,如下所示: mvn...
  • andamajing
  • andamajing
  • 2016年08月02日 21:33
  • 15333

Maven 依赖范围、依赖传递、排除依赖

依赖范围 回顾下maven构建坐标的构成,如下 junit junit 3.8.1 test ...
  • sinat_25926481
  • sinat_25926481
  • 2017年08月08日 18:10
  • 997
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Maven依赖
举报原因:
原因补充:

(最多只允许输入30个字)