Maven Scope(依赖范围)小总结

Maven Scope(依赖范围)小总结

先来下比较官方解释:

在Maven的世界中,有很多种classpath,编译classpath,测试classpath,运行classpath
依赖范围就是用来控制依赖与这三种classpath的关系
compile:编译依赖范围。如果没有指定,则默认使用该依赖范围。使用此范围的依赖,在编译,测试,运行着三种classpath都有效。
test:测试依赖范围。使用此范围的依赖,只对测试classpath有效,即只有在测试的代码中才可用。典型例子就是Junit
provided:已提供依赖范围。使用此范围的依赖对于编译和测试都有效,但在运行时无效。典型例子就是servlet-api
runtime:运行时依赖范围。使用此范围的依赖对于测试和运行classpath有效,但在编译主代码是无效。典型例子就是JDBC驱动实现
system:系统依赖范围。对于编译和测试有效,但在运行时无效。使用system范围时,必须通过systemPath元素显示的指定依赖文件的路径(慎用)
import:只支持pom类型的依赖,而且必须在存在于模块pom.xml的dependencyManagement配置区内。 这功能是用来解决pom.xml 只能单继承不能多继承问题,利用组合而不是继承关系引入依赖。最经典的是springboot。

接下来说说 比较难理解的依赖范围:provided和runtime

provided,说的是该依赖中scope标注了provided, 表示编译和测试都会引入该依赖包,但运行时不引入该依赖包,不会被打包到部署的工程文件中,运行时该依赖包由容器提供。这种情况更多适用基础模块依赖,如servlet-api,作为web servlet容器基础依赖。该依赖包不具有传递性。

runtime, 说的是该范围的依赖不需要在编译阶段使用,只有在测试及运行时才存在。也会存在于打包后的部署文件中。该依赖是在运行时需要时,动态加载代码,如JDBC驱动。一般是通过动态加载或接口反射加载的情况比较多。

http://www.cnblogs.com/jager/p/5540788.html
http://blog.csdn.net/mn960mn/article/details/50894022
https://segmentfault.com/a/1190000005062416

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,985评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • maven项目中需要使用到其它依赖时,则需要在pom.xml中配置<dependency>元素也就是依赖声明,这样...
    zlcook阅读 1,870评论 1 3
  • 坐标 maven管理项目依赖的底层基础-坐标。坐标元素:groupId、artifactId、version、pa...
    破晓追风阅读 500评论 0 0
  • 冶溪,一座禅意浓浓的古镇,一座没有雾霾的山城,一座古朴典雅的桃源,是一幅活着的画,是一首凝固的诗。漂泊在外的游子啊...
    瑶依瑶阅读 457评论 1 2