Maven scope 依赖关系、范围的理解详解,通俗易懂。

maven常用依赖关系

Maven scope 指定了Maven构建过程中依赖库的使用范围,上图给出了maven常用范围

1、compile:默认的依赖范围,表示该库在编译、测试、运行都需要用到,即:当maven进行compile(将Java源文件编译成.class文件)时,会将该库打包到编译后的源文件的目录中(classpath)即:参与编译,参与运行

2、runtime:最难理解的一个范围,表示依赖库在运行的时候需要用到,但是在编译阶段不需要用到,即:不参与编译,参与运行。
例如:JDBC驱动。我们在代码中需要使用java.sql包的类,但是在编译的时候并不需要直接使用JDBC驱动类,因为JDBC驱动程序在运行的时候会被动态加载:通过静态资源提前记录ClassName,运行时通过解析该静态资源获取相应信息,再反射获取。因此,我们在编写代码的过程中对于runtime的包,不能直接引入包里面的类和方法,IDE会给予错误提示。

  **mysql驱动设为runtime**

mysql驱动设置为runtime

     **mysql驱动包中的类**

包中的类

     **直接引入该类报错**

直接引用会报错

     **改为compile**

设为compile

     **正常引入**

正常引用

总之对于runtime的范围的类,会跳过编译阶段,但仍会打包到classpath中,参与运行时动态调用。对于所有数据库驱动都是推荐runtime范围,我们在写代码的时候只要调用jdk提供的JDBC的接口规则,具体的实现,不管是Mysql驱动还是Oracle驱动,驱动厂商都已经按照JDBC的接口规则去实现了。只需要在运行时动态调用即可。

3、test:仅在单元测试的时候能用到,如:JUnit。平时用的少,一般程序员平常很少编写测试单元和测试用例。不参与编译,不参与运行 不会打包到项目(classpath)中

4、 provided: 表示依赖库在编译和测试时需要使用,但在运行时不需要使用,因为这些依赖库由容器(如Tomcat) 提供,例如 servlet-api。参与编译,不参与运行,不会打包到项目(classpath)中。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值