maven常用scope作用域:compile、runtime、provided、test、system。

compile:scope的默认值,编译期、运行期有效,常见的jar比如:spring-core。会打包到项目war包中。

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version><scope>compile</scope></dependency>

runtime:运行期有效,编译期无效(jar中的类无法显示的在程序中引用,否则编译不通过),常见的jar比如:mysql-connector-java。会打包到项目war中。

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.12</version><scope>runtime</scope></dependency>

provided:编译期、运行期有效,常见的jar比如:servlet-api。不会打包到项目war中。

<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>

test:jar中的类,只针对测试模块,不能用在main程序中,常见的jar比如:junit。不会打包到项目war中。

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

system:一般配合systemPath节点使用。不会打包到项目war中。

<dependency><groupId>xerces</groupId><artifactId>xercesImpl</artifactId><version>2.11.0</version><scope>system</scope><systemPath>${basedir}/src/main/resources/lib/xercesImpl-2.11.0.jar</systemPath></dependency>

其他说明:

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

optional:不会依赖传递jar的引用,用法如下:

例如

  • B依赖了日志框架 logback、log4j、apache commons log
  • 这时候的依赖关系如下 A->B

因为maven有依赖传递机制.那么A项目就会有3个jar包,logback、log4japache commons log.实际上我们一般只会在项目中使用一种日志框架.那么我们项目中就会有多余的依赖.当这种情况时越来越多时,最后整个项目的jar包就有很多的多余依赖,导致项目很臃肿.

如何优化

只要B项目中把logback、log4j、apache commons log设置成<optional>true</optional>

<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><optional>true</optional>
</dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><optional>true</optional>
</dependency>

ps:我在工作之余还能坚持写博客,这在很大程度上面要感谢我的小宝贝:文。

maven常用scope作用域说明相关推荐

  1. 站住,Maven依赖的scope作用域,还记得几个?

    小明今天带大家回顾一下maven依赖的作用域 在POM中,<dependency>引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用5个值: c ...

  2. Maven学习详解(13)——Maven常用命令大全与pom文件讲解

    2019独角兽企业重金招聘Python工程师标准>>> 一.Maven常用命令 1.1.Maven 参数 -D 传入属性参数  -P 使用pom中指定的配置  -e 显示maven运 ...

  3. spring bean scope作用域及多线程安全问题场景分析

    2019独角兽企业重金招聘Python工程师标准>>> Scope作用域 在 Spring IoC 容器中具有以下几种作用域: singleton:单例模式,在整个Spring Io ...

  4. maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

    maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository. ...

  5. Maven常用参数及其说明

    2019独角兽企业重金招聘Python工程师标准>>> Maven常用参数及其说明 -h,--help                              Display he ...

  6. AngularJS Scope(作用域)

    Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带 Scope 是一个对象,有可用的方法和属性 创建控制器时,你可以将 $scope 对象当作一个参数传 ...

  7. maven 常用插件3

    maven 常用插件3 转载:http://www.cnblogs.com/dennyzhangdd/p/5831112.html 1.根据项目类型打包:jar/war打包插件. 首先看<pac ...

  8. html 根作用域,AngularJS入门教程之Scope(作用域)

    AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Scope ...

  9. maven中scope属性的

    转载自 maven中scope属性的 Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<sc ...

最新文章

  1. 【CCD图像检测】0:开篇总述
  2. VirtualBox虚拟机开机后台自启动
  3. Hadoop(十五)MapReduce程序实例
  4. MATLAB混合编程视频教程下载 SIMULINK系统仿真视频
  5. java找重复字符串_在java中怎样查找重复字符串
  6. 哥大首位华裔女校长:人工智能的春天来了
  7. 泡泡玛特通过港交所聆讯 上半年总收益8.18亿元
  8. JSP 语法2 都在百分号里面: 5.@符号加JSP三种指令标签 6
  9. 连载四:PyCon2018|恶意域名检测实例(附源码)
  10. Shell脚本 批量修改目录下若干文件名
  11. jenkins集成sonar问题记录
  12. 《动手学深度学习》Task06-3:词嵌入进阶
  13. linux 消息队列API
  14. 基于深度学习的色情视频鉴定
  15. java attachment_Java 接收邮件(接收多附件)
  16. Vue开发版本与生产版本的区别
  17. ESP8266 接入阿里物联网平台实现远程控制LED
  18. Spelling Error Correction with Soft-Masked BERT
  19. find基础命令与提权教程
  20. 「京东程序员」因压力过大在页面植入「骂人代码」?

热门文章

  1. N1・N2听力单词 —— 交通、出行 / 家庭生活、人际关系
  2. Jsp(二)——简单的Jsp程序
  3. 【MVC-自定义过滤器】
  4. 欧拉回路(欧拉路径)
  5. 合肥工业大学计算机与信息学院学生会宗旨,合肥工业大学宣城校区第一届学生会成立大会召开...
  6. 2023版golang面试题100道(map)
  7. 塞雷三分钟漫画中国史3
  8. C# 操作Excel数据透视表详解 – 创建、操作和删除
  9. Milk Measurement
  10. VMWare网络模式(Centos7)