Maven3-依赖

依赖配置

我们先来看一份简单的依赖声明:

<project>
...
<dependencies>
     <dependency>
         <groupId>...</groupId>
         <artifactId>...<artifactId>
         <version>...</version>
         <type>...</type>
         <scope>...</scope>
         <optional>...</optional>
         <exclusions>
              <exclusion>...<exclusion>
              ...
         </exclusions>
     </dependency>
     ...
</dependencies>
...
</project>

可以看到所有依赖都会被放置在dependencies标签中,在dependency中的所有标签都是依赖的配置

  • type:依赖的类型,默认值为jar
  • scope:依赖的范围
  • optional:标记依赖是否可选
  • exclusions:用来排除传递性依赖

配置1依赖范围, scope

classpath

classpath:classpath会告诉java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或包

Maven和classpath

在Maven中会使用三种classpath,分别是编译classpath,测试classpath和运行classpath,所以配置scope指定的依赖范围就是指依赖与classpath的关系。

Maven中的依赖范围

Maven包括以下几种依赖范围:

  • compile:编译依赖范围,默认为此范围,使用此依赖范围对编译,测试,运行三种classpath都有效
  • test: 测试依赖范围,只对测试classpath有效
  • provided:已提供依赖范围,对编译和测试classpath有效,编译和测试的时候需要该依赖,运行时,容器已提供,就不需要重复引入
  • runtime: 运行时依赖范围,对测试和运行classpath有效
  • system:系统依赖范围,依赖范围和provided一致,但使用时必须通过systemPath元素显示指定依赖文件的路径
  • import:导入依赖范围,不会对三种classpath产生实际的影响

配置2传递性依赖,optional与exclusions

什么是传递性依赖?

现在有一个项目,若我们没有使用Maven,那么就需要我们手动下载相关的依赖,而这些依赖在定义时,有的也会有它自己的依赖,假设项目有依赖A,A依赖又依赖于a,依赖A和依赖a的依赖范围都是compile,这时候就称依赖a是项目的传递性依赖。有了传递性依赖,使用一个依赖时就不用考虑他依赖了什么,也不用担心引入了多余的依赖,Maven会解析各个直接依赖的POM,将那些必要的简介依赖,以传递性依赖的形式引入到当前的项目中。

传递性依赖和依赖范围

依赖范围影响传递性依赖

依赖调节

现有两条传递性依赖,如下:

  1. A->B->C->X(1.0) ,A->D->X(2.0)
  2. A->B->Y(1.0), A->C->Y(2.0)

可以看到两条依赖中,在A的两条依赖路径上都有两个版本的X或Y,显然两个版本都被解析是不对的,会造成依赖重复,那么Maven会选择哪个呢?,根据以上两种情况,Maven制定了如下两种规则:

  • 路径近者优先,也就是在第一条依赖中,会解析X(2.0)
  • 路径长度相同时,第一声明者优先,第二条依赖中,会解析Y(1.0)

可选依赖 optional

可选依赖就是指:A->B,B->X(可选),B->Y(可选),如B是一个持久层隔离工具包,支持多种数据库,构建B时需要多种数据库的驱动程序,但在使用B时,只能选择一种数据库。在编写B的pom.xml时,要在依赖中添加<optional>true</optional>配置。
可选依赖不会被传递,只会对B产生影响,当A依赖于B时,需要在A中显式的声明所依赖的数据库

排除依赖exclusions

A->B->C
A依赖B,B依赖C,若这时我们不想使用B依赖deC,而想自己定义,可以使用exclusions配置

<project>
<groupId>com.xikunqu.project</groupId>
<artifactId>project-A</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
     <groupId>com.xikunqu.project</groupId>
     <artifactId>project-B</artifactId>
     <version>1.0.0</version>
     <exclusions>
         <exclusion>
              <groupId>com.xikunqu.project</groupId>
              <artifactId>project-C</artifactId>
         </exclusion>
      </exclusions>
</dependency>
<dependency>
     <groupId>com.xikunqu.project</groupId>
     <artifactId>project-c</artifactId>
     <version>1.0.0</version>
     </dependency>
</dependencies>
</project>

最佳实践

归类依赖

当我们引入了一个项目的多个模块,这些模块的版本还是相同的时,我们可以进行如下定义:

<project>
...
<properties>
     <springframework.version>2.5.6</springframework.version>
</properties>
<dependencies>
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-core</artifactId>
         <version>${springframe.version}</version>
     </dependency>
     ...
</dependencies>
</project>

优化依赖

  • mvn dependency:list ,查看当前项目的已解析依赖
  • mvn dependency:tree,查看当前项目的依赖数
  • mvn dependency:analyze,帮助分析当前项目的依赖
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容