专栏首页程序员小明站住,Maven依赖的scope作用域,还记得几个?

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

小明今天带大家回顾一下maven依赖的作用域

在POM中,<dependency>引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:

  • compile,缺省值,适用于所有阶段,会随着项目一起发布。
  • provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
  • runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
  • test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
  • system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

依赖范围控制哪些依赖在哪些classpath 中可用,哪些依赖包含在一个应用中。让我们详细看一下每一种范围:

compile (编译范围)

compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包。

provided (已提供范围)

provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。

runtime (运行时范围)

runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC 驱动实现。

test (测试范围)

test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。

system (系统范围)

system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。

本文分享自微信公众号 - 程序员小明(coderxinqiji),作者:coder小明

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在 Spring Boot 项目中使用 Swagger 文档

    Spring Boot 框架是目前非常流行的微服务框架,我们很多情况下使用它来提供 Rest API。而对于 Rest API 来说很重要的一部分内容就是文档,...

    程序员小明
  • 「源码」MyBatis源码环境搭建及分析

    之前阅读了JDK常用容器的源码本章就开始阅读Mybatis源码。不过在阅读之前我们首先搭建一下源码阅读环境,这样有利于我们后面的阅读,更加可以一边写注释一边的D...

    程序员小明
  • Git删除暂存区或版本库中的文件

    Git有三大区(工作区、暂存区、版本库)以及几个状态(untracked、unstaged、uncommited),下面只是简述下Git的大概工作流程,详细的可...

    程序员小明
  • 站住,Maven依赖的scope作用域,还记得几个?

    在POM中,<dependency>引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:

    乱敲代码
  • 记一次配置文件报错之Cannot resolve class or package 'jdbc'

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    suveng
  • 转-Android上面运行golang

    golang最让我心动的,就是交叉编译比较方便,android基本上都是arm处理器,交叉编译过arm的都知道,工具链不一样,往往问题比较麻烦,其中最大的问题在...

    李海彬
  • DOM渲染的详细过程

    DOM的渲染指的是对于浏览器中展现给用户的DOM文档的生成的过程。在Chrome中,这个渲染好的DOM,就是在开发者工具中元素这个tab中,递归的展开之后得到的...

    动力节点Java学院
  • 深入理解 Synchronized

    java404
  • 用 Charles 玩转微信小程序:抓取摩拜、OFO以及车来了数据

    最近沉迷于用 Charles 做代理抓手机的数据。 ? 关于如何使用 Charles 来做为手机的代理进行抓 HTTP/HTTPS 请求,这里有一篇非常详细的图...

    企鹅号小编
  • svn 提交代码 自动过滤技巧

    操作   在用svn管理版本时,有时希望在提交到服务器时,能过滤掉指定后缀名的所有文件,或指定名称的文件夹、文件名。   常见的文件夹名称和文件名如下: bin...

    hbbliyong

扫码关注云+社区

领取腾讯云代金券