maven scope 常用作用域整理

maven scope 常用作用域整理

本文主要是梳理maven dependency依赖常见scope的理解。


maven是什么?

Apache Maven,是一个软件项目管理及自动构建工具,由Apache软件基金会所提供。使用maven进行依赖管理时,会在 pom.xml 文件中添加 dependency 标签,并添加对于的依赖坐标,例如:

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

其中,各个标签的作用如下:

  • groupId:依赖类库的坐标,一般是依赖类库所在包的全路径(普遍为公司/组织域名的反写);
  • artifactId:依赖类库的坐标,是依赖类库的项目名称;
  • version:依赖类库版本信息;
  • scope:依赖类库的作用域,可设置的值有:compiletestprovidedruntimesystem等。

scope 常见作用域

下面将常见scope的值整理成表格,其中Y表示生效,-表示不生效;主代码区域指的是main->java目录下的代码编辑区域;测试代码指的是main->test目录下的单元测试代码编辑区域;打包指的是将项目打包成warjar等可运行包。

作用域对于主代码对于测试代码打包(即运行时)例子
compileYYYlog4j
test-Y-junit
providedYY-servlet-api
runtime--YJDBC Driver Implementation
  • compile:是Maven依赖的默认scope,使用该值则表示添加的依赖类库会在项目中所有环境下(开发、测试、运行时)中都存在;
  • test:表示添加的依赖类库只能在编写及运行单元测试代码时使用,在主代码区域及打包中是无法直接引用该类库中的相关类;
  • provided:表示添加的依赖类库只会在主代码区和单元测试区里面使用,但是打包项目的时候是不会包含该依赖类库,典型的就是在打包war部署到Tomcat时,需要将servlet-api依赖项排除掉,因为Tomcat中已经包含该类库了;
  • runtime:则是跟provided相反,只会在项目打包时被引入,典型的就是jdbc相关驱动,因为jdbc驱动都是实现了jdbc相关接口,所以在主代码区域和单元测试区编写代码时,只需要使用内置的jdbc相关接口,不关心具体实现,具体实现类可以在项目打包及运行时再添加到项目中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值