maven的scope总结

scope类型

compile

编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven 依赖,对于编译、测试、运行三种classpath 都有效。大部分是这种,在编译、测试和运行的时候都需要使用该依赖。

test

测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子是JUnit,它只有在编译测试代码及运行测试的时候才需要。

scope 为 test 的依赖只在测试时使用,用于编译和运行测试代码,不会参与项目的打包

provided

已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效(对运行的classpath无效)。典型的例子是 servlet-api, 编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引人一遍。既然运行时容器会提供,所以 scope 为 provided 的依赖不会参与项目的打包。

runtime

运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行class-path有效,但在编译主代码时无效(对编译的classpath无效)。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动

system

系统依赖范围。该依赖与三种 classpath 的关系,和 provided 依赖范围完全一致。但是,system 范围的依赖不会从 maven 仓库下载,而是从本地文件系统获取,使用 system 范围的依赖时必须通过 <systemPath> 元素显式地指定依赖文件的路径。

由于此类依赖不是通过 Maven 仓库解析的,而且往往与本机系统绑定,可能造成构建(构建的产物有:classes和artifact)的不可移植,因此应该谨慎使用。

其中元素 <systemPath> 可以引用环境变量

import

导入依赖范围,该依赖范围不会对三种 classpath 产生影响,该依赖范围只能与 <dependencyManagement> 元素配合使用,其功能为将目标pom.xml 文件中元素 <dependencyManagement> 的配置导入合并到当前 pom.xml 文件的元素 <dependencyManagement> 中。

相关推荐
ZZHow102415 小时前
Maven入门_简介、安装与配置
java·笔记·maven
yunmi_18 小时前
2024版 IDEA 用 Maven 创建 java 项目(+Maven 安装和配置)
java·maven
煎饼皮皮侠2 天前
【图解】idea中快速查找maven冲突
java·maven·intellij-idea·冲突
麦兜*2 天前
MongoDB 与 GraphQL 结合:现代 API 开发新范式
java·数据库·spring boot·mongodb·spring·maven·graphql
叶 落2 天前
[Maven 基础课程]第一个 Maven 项目
maven·maven 入门·maven 基础
码畜也有梦想3 天前
Maven中optional的作用
java·jenkins·maven
上官浩仁4 天前
springboot maven 多环境配置入门与实战
java·spring boot·maven
元直数字电路验证4 天前
新建Jakarta EE项目,Maven Archetype 选项无法加载出内容该怎么办?
java·maven
麦兜*4 天前
Docker 部署 MongoDB:单节点与副本集的最佳实践
java·spring boot·mongodb·spring cloud·docker·容器·maven