Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Maven 的 Scope 区别,你知道吗?

Maven 的 Scope 区别,你知道吗?

作者头像
好好学java
发布于 2020-03-20 13:04:19
发布于 2020-03-20 13:04:19
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

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包路径,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<classifier>jdk17</classifier>
<classifier>jdk18</classifier>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 好好学java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Maven pom 中配置依赖机制
依赖管理是 Maven 的一个核心特性。管理单个项目的依赖关系非常简单。管理由数百个模块组成的多模块项目和应用程序的依赖关系是可能的。Maven 使用定义良好的类路径和库版本在定义、创建和维护可重复的构建方面帮助很大。
acc8226
2022/05/17
2K0
Maven pom 中配置依赖机制
Maven 30问
5、**Maven 的坐标(Coordinates)是什么?它由哪些部分组成?**
阿彬学java
2025/02/18
1241
Maven的pom文件那些事
jdk7//用于定义构建输出的一些附属的构建。classifier是不能直接定义的,只能存在附加的构件(插件)时,才能(必须)添加。在包名上也会有所提现(nexus-indexer-2.0.0-javadoc.jar)
迹_Jason
2019/05/28
1.5K0
maven实战总结,工作中常见操作
翻译:知识的积累、专家、内行。跨平台的项目管理工具。Apache 组织的开源项目。主要服务于基于 Java 平台的项目构建、依赖管理和项目信息管理。
Java识堂
2020/11/19
1.4K0
maven实战总结,工作中常见操作
五分钟快速掌握Maven的核心概念
前两天在一个技术群,有人还在问maven中groupId、artifactId、version这些关键字的含义是什么,于是,我觉得还是很有必要来聊聊Maven中的这些核心概念。
田维常
2021/01/13
6860
五分钟快速掌握Maven的核心概念
pom配置 仓库信息(下)
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。用过Maven的都知道,国外的中央仓库用起来太慢了,所以选择一个国内的镜像就很有必要,我推荐国内的阿里云镜像。
陈不成i
2021/06/29
7770
Maven中optional和scope元素的使用,你弄明白了?
在梳理项目的过程中发现很多开发同学对Maven依赖文件的配置并不了解,特别是对Maven的optional元素和scope元素的使用也非常随意。这就会导致发布的jar包或war包非常“胖”、编译速度慢,而且还很容易生产jar冲突等问题。本篇文章从optional和scope的使用场景入手,让项目实现一波瘦身。
程序新视界
2020/12/03
7.7K0
Maven中optional和scope元素的使用,你弄明白了?
万字长文解析maven
现在IntellJ IDEA中已经集成了maven,如果都在IDE中操作,不下载maven也是可以的,但是settings.xml一定要改。
Louis XIV
2024/12/30
2510
万字长文解析maven
Maven详解
使用 x、y、z 三个『向量』作为空间的坐标系,可以在『空间』中唯一的定位到一个『点』
Java微观世界
2025/01/21
1860
Maven详解
Maven
默认生命周期:编译(compile)、测试(test)、打包(package)、安装(install)、发布(deploy) 清理生命周期:清除编译信息(clean) 站点生命周期:
matt
2022/10/25
7970
Maven
之前我们导入依赖的时候,每次都要去下载对应的 Jar 包,这样其实是很麻烦的,并且还有可能一个 Jar 包依赖于另一个 Jar 包,因此我们需要一个更加方便的包管理机制。
小简
2023/01/04
7520
Maven
万字 Maven 入门教程
Maven 这个词可以翻译为专家的意思。它是由 Apache 组织的开源,主要服务 Java 平台项目的构建、依赖管理和项目信息管理。
羽月
2022/10/08
1.6K0
万字 Maven 入门教程
《Maven实战》全书总结
把MAVEN_HOME/conf/seettings.xml cp 到 ~/.m2/下,在.m2下的settings.xml中所作的配置就是用户级别的配置,而直接编辑MAVEN_HOME/conf/seettings.xml所作的配置是全局的配置
CoderJed
2018/09/13
2K0
《Maven实战》全书总结
Maven中Scope的分类
默认就是compile,什么都不配置也就是意味着compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。
Ant丶
2022/03/01
8750
《Maven实战》笔记
作为Apache组织中颇为成功的一个开源项目,Maven主要服务于基于Java平台的项目构建,依赖管理和项目信息管理
Yuyy
2022/06/28
1K0
技能篇:maven的简易教程
maven是最流行的项目构建系统,如果是java相关的开发,可以说是不可或缺的。虽然还有另外一个模块管理工具grade正在崛起, 不过多数公司常用的还是maven
潜行前行
2021/06/25
1K0
技能篇:maven的简易教程
Maven使用详解
什么是Maven? 如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。 以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。 而Maven就是一款帮助程序员构建项目的工具,我们只需
大闲人柴毛毛
2018/03/09
3.2K0
Maven中pom.xml中的scope讲解
一、compile:编译范围 compile是默认的范围;如果没有提供一个范围,编译范围依赖在所有的classpath 中可用,同时它们也会被打包。而且这些dependency会传递到依赖的项目中。
全栈程序员站长
2022/07/01
6950
超级详细的 Maven 教程(基础+高级)
如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。借助于maven就可以将一个项目拆分成多个工程
JanYork_简昀
2022/10/28
3.3K1
超级详细的 Maven 教程(基础+高级)
Maven项目管理
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。
用户9645905
2023/11/01
3570
Maven项目管理
相关推荐
Maven pom 中配置依赖机制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验