maven依赖范围 -maven scope -compile依赖范围 -test依赖范围 -provided范围依赖

目录

一、在pom.xml中dependencies节点引用我们所需要的依赖

二、scope节点指定依赖范围,常见的依赖范围有三种:compile(默认)、test、provided

从三个方面看这三种依赖范围的区别

maven项目的标准目录结构

三种依赖范围的区别

原因分析

三、Tips

四、其它maven相关博客


一、在pom.xml中dependencies节点引用我们所需要的依赖



    4.0.0
   
    xin.yangshuai
    Hello
    0.0.1-SNAPSHOT
    
    Hello
    Demo project for Hello

    
        
            junit
            junit
            4.0
            test
        
    

二、scope节点指定依赖范围,常见的依赖范围有三种:compile(默认)、test、provided

  1. 从三个方面看这三种依赖范围的区别

    1. 是否对主程序有效(main目录下的程序):主程序代码是否可以引用这个依赖
    2. 是否对测试程序有效(test目录下的程序):测试程序是否可以引用这个依赖
    3. 是否参与打包(部署):打包(package)后,这个依赖是否会被打到包内(lib文件夹内)
  2. maven项目的标准目录结构

    Hello
    |---src
    |---|---main
    |---|---|---java
    |---|---|---resources
    |---|---test
    |---|---|---java
    |---|---|---resources
    |---pom.xml

     

  3. 三种依赖范围的区别

    依赖范围(scope) 是否对主程序有效 是否对测试程序有效 是否参与打包(部署) 典型例子
    compile 有效 有效 参与 spring-core
    test 无效 有效 不参与 junit
    provided 有效 有效 不参与 servlet-api.jar
    1. 测试程序常规情况下是不参与打包的

  4. 原因分析

    1. compile依赖范围:默认的依赖范围,开发时需要,部署时也需要(运行时servlet容器不会提供),一般的就是这样。
    2. test依赖范围:主程序(main)是无法依赖test范围的jar的,开发时就不可以(那些jar主程序也是用不到的),只有测试程序可以依赖。要知道,测试程序常规是不会参与打包的,test范围的依赖也不参与打包,只是在开发阶段会用到,或者maven编译(compile)时会执行测试程序。
      1. 如果开发时主程序可以依赖test范围的jar,那么打包时由于test范围的jar不参与打包,所以打成的包运行时肯定就会报错。
    3. provided范围依赖:开发时,由于没有运行时环境,有些jar我们需要暂时依赖(不依赖有些方法就会找不到,用不了),但是项目打包部署运行时,由于运行时环境(servlet容器,比如:tomcat)会提供一些jar包,所以开发时那些暂时依赖的jar包就不能参与打包了,否则会发生冲突导致报错。

三、Tips

  1. 如有不对的地方还请告知,感激不尽

  2. 整体内容参考视频教程:http://www.gulixueyuan.com/my/course/42

四、其它maven相关博客

  1. maven依赖范围:https://blog.csdn.net/shuair/article/details/105350415
  2. maven依赖传递性:https://blog.csdn.net/shuair/article/details/105401296
  3. maven统一依赖版本号:https://blog.csdn.net/shuair/article/details/105404764
  4. maven聚合:https://blog.csdn.net/shuair/article/details/105416365

 

你可能感兴趣的:(maven,maven)