点击上方 好好学java ,选择 星标 公众号

重磅资讯、干货,第一时间送达
今日推荐:一个线程池 bug 引发的 GC 思考!个人原创+1博客:点击前往,查看更多
链接:https://segmentfault.com/a/1190000022039446

1、依赖的Scope

scope定义了类包在项目的使用阶段。项目阶段包括: 编译,运行,测试和发布。

2、分类说明

compile

默认scope为compile,表示为当前依赖参与项目的编译、测试和运行阶段,属于强依赖。打包之时,会达到包里去

test

该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junit。

runtime

依赖仅参与运行周期中的使用。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。 此类的驱动都是为runtime的类库。

provided

该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译、测试和运行等周期,与compile等同。区别在于打包阶段进行了exclude操作。

system

使用上与provided相同,不同之处在于该依赖不从maven仓库中提取,而是从本地文件系统中提取,其会参照systemPath的属性进行提取依赖。

import

这个是maven2.0.9版本后出的属性,import只能在dependencyManagement的中使用,能解决maven单继承问题,import依赖关系实际上并不参与限制依赖关系的传递性。

3、systemPath

当maven依赖本地而非repository中的jar包,sytemPath指明本地jar包路径,例如:

<dependency><groupid>org.hamcrest</groupid><artifactid>hamcrest-core</artifactid><version>1.5</version><scope>system</scope><systempath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systempath>
</dependency>

4、dependency中的type

引入某一个依赖时,必须指定type,这是因为用于匹配dependency引用和dependencyManagement部分的最小信息集实际上是{groupId,artifactId,type,classifier}。在很多情况下,这些依赖关系将引用没有classifier的jar依赖。这允许我们将标识设置为{groupId,artifactId},因为type的默认值是jar,并且默认classifier为null。 type的值一般有jar、war、pom等,声明引入的依赖的类型

5、dependency中的classifier

Classifier可能是最容易被忽略的Maven特性,但它确实非常重要,我们也需要它来帮助规划坐标。设想这样一个情况,有一个jar项目,就说是 dog-cli-1.0.jar 吧,运行它用户就能在命令行上画一只小狗出来。现在用户的要求是希望你能提供一个zip包,里面不仅包含这个可运行的jar,还得包含源代码和文档,换句话说,这是比较正式的分发包。这个文件名应该是怎样的呢?dog-cli-1.0.zip?不够清楚,仅仅从扩展名很难分辨什么是Maven默认生成的构件,什么是额外配置生成分发包。如果能是dog-cli-1.0-dist.zip就最好了。这里的dist就是classifier,默认Maven只生成一个构件,我们称之为主构件,那当我们希望Maven生成其他附属构件的时候,就能用上classifier。常见的classifier还有如dog-cli-1.0-sources.jar表示源码包,dog-cli-1.0-javadoc.jar表示JavaDoc包等等。 classifier它表示在相同版本下针对不同的环境或者jdk使用的jar,如果配置了这个元素,则会将这个元素名在加在最后来查找相应的jar,例如:

<classifier>jdk17</classifier>
<classifier>jdk18</classifier>

Maven 的 Scope 区别,你知道吗?相关推荐

  1. eclipse中的maven build、maven clean、maven install和maven test的区别

    eclipse中的maven build.maven clean.maven install和maven test的区别 https://www.cnblogs.com/Marydon20170307 ...

  2. maven中scope属性的

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

  3. maven常用scope作用域说明

    maven常用scope作用域:compile.runtime.provided.test.system. compile:scope的默认值,编译期.运行期有效,常见的jar比如:spring-co ...

  4. Maven与Maven POM的区别

    Maven与Maven POM的区别 在用idea创建maven项目时,在Project Metadata界面Type选项下唯有Maven和Maven POM两个选项,我们应该怎么选择呢? 下面介绍一 ...

  5. 注册为Linux服务,docker部署,dockerfile,spring boot测试监控,actuator,项目远程访问,maven的scope标签

    1. 项目注册为 Linux服务 可以开启 关闭 开机启动 mvn package java -jar xxxx.jar pom加executable <build><plugins ...

  6. Maven中scope依赖范围和依赖的传递性

    Maven中使用 scope 来指定当前包的依赖范围和依赖的传递性.常见的可选值有:compile, provided, runtime, test, system 等.scope 主要是用在 pom ...

  7. Maven依赖Scope标签用法

    2019独角兽企业重金招聘Python工程师标准>>> 在一个maven项目中,如果存在编译需要而发布不需要的jar包,可以用scope标签,值设为provided.如下: < ...

  8. Maven的scope详解

    文章目录 依赖范围介绍 compile test provided runtime system import 依赖传递 依赖范围与 classpath 的关系表 参考 依赖范围介绍 maven 项目 ...

  9. maven dependency scope

    maven依赖关系中Scope的作用 Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<sc ...

最新文章

  1. java 正则 懒惰_正则表达式懒惰模式
  2. AtCoder AGC029F Construction of a Tree (二分图匹配)
  3. 【Paper】Network Dissection: Quantifying Interpretability of Deep Visual Representations跑源码遇到的问题
  4. [Java网络编程基础]TCP发送和接收数据
  5. SIP与RTP综合应用5-RTP解包过程
  6. RabbitMQ的5种队列_消息确认模式_入门试炼_第6篇
  7. 您对无法重新创建的表进行了更改或者启用了“阻止保存要求重新创建表的更改”选项...
  8. 报错,npm ERR! code ENOLOCAL
  9. Rsyslog+LogAnalyzer+MySQL部署日志服务器
  10. html中横线中间加字_干货|学术论文中的“三线表”如何绘制?
  11. Java程序员春招三面蚂蚁金服,丹丹丹学妹哭着对我说:学长
  12. 10个新晋潮语,测你潮不潮!
  13. idea java代码格式化_IDEA java 代码格式化统一
  14. linux系统上查询ip地址归属
  15. 盲盒商城app开发需要具备哪些核心功能,盲盒商城app源码成品分享
  16. 【SpringCloud系列】 分布式事务-LCN
  17. excel sumifs多条件求和
  18. CocosStudio(八)AtlasLabel数字标签、BitmapLabel自定义字体、Label文本框
  19. 《算法笔记》2.3小节——C/C++快速入门-选择结构
  20. 【HTML5】嵌入另一张HTML文档、通过插件嵌入内容、嵌入数字表现形式

热门文章

  1. 【转】浅谈MS-SQL锁机制
  2. Linux mktime 源代码简析
  3. C语言中类型使用的问题
  4. 蓝牙核心-L2CAP
  5. android enum java包_Android @IntDef注解取代Java enum枚举提高性能详解
  6. C++ Primer 5th笔记(chap 19 特殊工具与技术)枚举类型
  7. Hyperledger Fabric 智能合约实战 (6) 访问链码接口
  8. python—多进程之进程池
  9. ARMV8-aarch64的寄存器介绍(二)
  10. 博客阅读学习笔记-目录