4、Maven坐标&依赖

groupId、artifactId、version共同组成一个坐标来唯一确定该项目在仓库中的位置

当正确配置maven的依赖后,maven会从中央仓库下载对应的依赖

相关信息在已在 ## 2.2 提到

maven打出来的包名一般按照artifactId-version[-classifier].packaging的规约生成

1.1、依赖(dependency)的具体元素

  • groupId
  • artifactId
  • version
  • type:可以不声明,默认为jar
  • scope:可以不声明,默认为compile
  • optional:表示依赖是否可选
  • exclusions:排除传递性依赖

1.2、依赖范围(scope)

  • compile:对于编译、测试、运行三种生命周期的test/main下的源代码都有效,默认为这个

  • test:只对于测试的生命周期的test目录下的代码有效,如JUnit

  • provided:对于编译、测试两种生命周期的test/main下的源代码都有效,如servlet-api,容器可以提供这个,所以运行时不用maven提供依赖

  • runtime:测试和运行时的test/main下的代码有效,如JDBC驱动

  • system:对于编译、测试两种生命周期的test/main下的源代码都有效,但是要与本机的系统路径绑定,一致性不强,也不是由maven仓库解析

    <dependency>
      ....
      <scope>system</scope>
      <systemPath>${java.home}/lib/rt.jar</systemPath>
    </dependency>
    
  • import:导入依赖范围,不对依赖的生命周期不会有实际影响

1.3、传递性依赖

A依赖B,B依赖C,那么C就是A的传递性依赖

  • 当第二直接依赖的范围是compile时,传递性依赖的范围与第一直接依赖一致
  • 当第二直接依赖的范围是test时,传递性依赖不会得到传递
  • 当第二直接依赖的范围是provide时,只传递第一直接传递范围为provide的依赖,且范围也是provide
  • 当第二直接依赖的范围是runtime时,传递性依赖范围与第一直接依赖范围一致,但compile不一样,传递依赖为runtime

1.4、依赖调解

有如下依赖路径:

A -> B -> C -> X (1.0)

A -> D -> X (2.0)

两条路径都引用了X,此时Maven会选用最短路径原则,那么第二条路径会被运用

有如下依赖路径:

A -> C -> X (1.0)

A -> D -> X (2.0)

两条路径都引用了X,且路径长度一致,此时Maven会选用最先声明原则,在pom文件先声明的依赖会被启用,那么第一条路径会被运用

1..5、排除传递性依赖

排除依赖只需要groupId和artifactId

<dependency>
    ....
    <exclusions>
        <exclusion>
            <groupId>···</groupId>
            <artifactId>···</artifactId>
        </exclusion>
    </exclusions>
</dependency>

1.6、依赖归类

同一项目的不同包可能优势用的版本是一样的,我们可以用Maven的属性来进行统一管理

<properties>
    <a.version>1.0.0</a.version>
</properties>

然后在dependency的version中使用${a.version}引用即可

1.7、优化依赖

Maven会解析项目的直接依赖和传递依赖,并且正确判断依赖范围,可以调节依赖冲突来保证只有一个版本正确引用,完成后的依赖叫已解析依赖

  • 查看依赖列表

    cmd:mvn dependency:list
    
  • 查看依赖树状图

    cmd:mvn dependency:tree
    
  • 分析项目依赖使用情况

    cmd:mvn dependency:analyze
    

    可以查看依赖是否被使用等等

    此处怀疑只能看到scope为compile而没被用到的依赖,scope为provided但实际在项目中要用到的依赖同样会显示unused dependency

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

推荐阅读更多精彩内容

  • 遗世独立不染一粒红尘 孤注一掷不怕艰难险阻 年岁半百韵意犹存在心 心如明镜却也不愿回头 三十你我却也同相欢喜 恨过...
    中营的迷妹阅读 238评论 0 2
  • 把我抢走吧 带着你的马儿带着你的兄弟 带着你半旧的马鞍锃亮的刀 带着你没喝完的酒裁了半截的豹皮 带着你自制的火枪和...
    鶑鵅阅读 260评论 0 0