Maven学习笔记(2) --- 依赖

maven依赖

在maven项目中,我们会在pom.xml文件中引入我们需要用到的依赖,一般用groupId,artifactId,version就够了,如下:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>

有时,也会指定依赖范围,比如:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

maven有3套classpath,编译classpath,运行classpath,测试classpath。

依赖范围

依赖范围有以下几种:

  • compile 编译依赖范围。默认是这种范围。对3中classpath都有效。典型例子是spring-core,在编译,运行,测试时都需要。
  • test 测试依赖范围。只对测试classpath有效。典型例子是junit,它只在测试期间需要。
  • provided 已提供依赖范围。对编译classpath和测试classpath有效,运行classpath无效。典型例子是servlet-api,运行的时候容器会提供,所以运行时不需要。
  • runtime 运行时依赖范围。对运行classpath和测试classpath有效。典型例子是jdbc驱动实现,编译的时候只要有jdk的jdbc接口即可。
  • system 系统依赖范围。和provided一样,对3中classpath都有效。但是,使用时必须通过systemPath元素显式指定依赖文件的路径。限制比较多,一般不使用。
  • import 导入依赖范围。对3中classpath都没实际影响。

依赖机制

  1. 依赖会传播:A依赖B,B依赖C,那么maven解析的时候会找到B,发现B依赖C,又去把C引入,然后在引入B
  2. 有相同依赖的时候,优先选路径最近的:比如A->B->C->X(1.0), A->D->X(2.0),这时候有2个X,会冲突,maven会选择最近的,也就是X(2.0)
  3. 在依赖路径长度相同时,优先选先声明的:比如A->B->Y(1.0), A->C->Y(2.0),在maven2.0.9之后,maven会选在pom中先声明的那个。即如果C的依赖声明在B之前,就选Y(2.0)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,974评论 6 342
  • maven项目中需要使用到其它依赖时,则需要在pom.xml中配置<dependency>元素也就是依赖声明,这样...
    zlcook阅读 1,865评论 1 3
  • Maven简单介绍 Maven是一个项目管理工具。强大,但是很容易使用。 它包含了: 一个项目对象模型 (Proj...
    高公子Daniel阅读 4,273评论 4 60
  • 天使二阶 A3组朱思东 周检视 20170519-0525 百日目标检视(55/100): 1. 目标1:自律*不...
    笑思东阅读 471评论 0 0