为了账号安全,请及时绑定邮箱和手机立即绑定

maven-坐标与依赖

标签:
Java

1、坐标-找到项目依赖的重要依据

<groupId>cmbc.com.cn</groupId>    
<artifactId>myapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

说明:a、groupId、artifactId、version必须配置,packaging为可选配置,未配置则默认为jar

   b、项目构件名称与坐标相对应,通常为artifactId-version.packaging,上述坐标对应构件名称为

      myapp-1.0-SNAPSHOT

2、依赖配置

复制代码

<project> 

  <dependencies>  可以包含多个<dependency>

    <dependency>
      <groupId>...</groupId>
      <artifactId>...</artifactId>
      <version>...</version>
      <type>...</type>    坐标类型,对应项目坐标定义的packaging
      <scope>...</scope>  依赖范围
      <optional>...</optional> 标记依赖是否可选
      <exclusions>  排除传递性依赖
        ...      </exclusions>
    </dependency>

 </dependencies>

</project>

复制代码

 3、依赖详述

  • 依赖范围

a、依赖范围种类

https://img1.sycdn.imooc.com//5b80c0a80001dc0205320272.jpg

b、依赖范围的作用

  Maven有编译、测试、运行classpath,依赖范围用于控制依赖与三种classpath的关系。

https://img1.sycdn.imooc.com//5b80c0b200016a4b08390252.jpg

  • 传递性依赖

a、项目A依赖于B,B依赖于C,则C是A的传递性依赖。Maven会将必要的间接依赖以传递式依赖的形式引入到项目。

b、确定传递性依赖范围

  项目A依赖于B,B依赖于C,则B是A的第一直接依赖,C是B的第二直接依赖,C是A的传递性依赖。第一和第二直接依赖的范围决定了传递性依赖的范围,如下所示,左边为第一直接依赖范围,上面为第二直接依赖范围,中间为传递性依赖范围:

https://img1.sycdn.imooc.com//5b80c1130001d62407900186.jpg

  • 依赖调解

  当项目多个直接依赖在其自己的依赖路径中分别依赖了同一个其它依赖,那么该引入哪一个路径上的依赖呢?

规则:不同路径长度,路径最短优先;相同路径长度,第一申明优先

  • 可选依赖

  假设A依赖于B,B依赖于C(可选),D(可选)(在B项目中的pom.xml文件依赖C和D,申明<dependency>中均添加<optional>true</optional>)。可选依赖不具备传递性,因此A项目中不能引入C或D的依赖,如果需要使用C或D需要在A项目中直接依赖C或D

  • 排除依赖

    传递性依赖会隐式的引入很多依赖,极大简化了项目依赖的管理。但在以下情形需要使用<exclusions>排除依赖:

a、A依赖B,B依赖C,C(快照版本)不稳定可能会影响项目A。此时需要排除C而引入C的稳定版本。

b、可能由于版权原因,C(稳定版本)不在中央仓库,而D项目是一个可替代的实现。此时需要排除C而引入D

原文出处:https://www.cnblogs.com/shixiemayi/p/9527488.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

0 评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消