文档章节

Maven 依赖范围(Dependency Scope)

晨猫
 晨猫
发布于 11/18 22:33
字数 1092
阅读 9
收藏 1

Dependency Scope

Dependency scope is used to limit the transitivity of a dependency, and also to affect the classpath used for various build tasks.

依赖范围用于限制依赖项的传递性,也影响用于各种构建任务的类路径。

There are 6 scopes available:

compile

This is the default scope, used if none is specified. Compile dependencies are available in all classpaths of a project. Furthermore, those dependencies are propagated to dependent projects.

默认的 scope。编译依赖项可在项目的所有类路径中使用。此外,这些依赖关系被传播到依赖项目。

provided

This is much like compile, but indicates you expect the JDK or a container to provide the dependency at runtime. For example, when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided because the web container provides those classes. This scope is only available on the compilation and test classpath, and is not transitive.

provided scope 很像 compile scope,但表示您希望JDK或容器在运行时提供依赖性。例如,当为Java企业版构建Web应用程序时,您会将servlet API和相关的JavaEE API的依赖项设置为提供的作用域,因为Web容器提供了这些类。此范围仅在编译和测试类路径上可用,并且不是传递性的。

runtime

This scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath.

此范围指示编译不需要依赖项,而是用于执行。它在运行时和测试类中,而不是编译类路径。

test

This scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases. This scope is not transitive.

此范围指示应用程序的正常使用不需要依赖项,并且仅可用于测试编译和执行阶段。这个范围不是传递的。

system

This scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository.

此范围与 provided 类似,只是必须显式地提供包含它的jar。工件总是可用的,而不是在存储库中查找的。

import

This scope is only supported on a dependency of type pom in the <dependencyManagement> section. It indicates the dependency to be replaced with the effective list of dependencies in the specified POM's <dependencyManagement> section. Since they are replaced, dependencies with a scope of import do not actually participate in limiting the transitivity of a dependency.

此范围仅支持在“依赖关系管理>节”中的类型POM的依赖项中。它指示要在指定的POM的<dependencyManagement>部分中用有效的依赖项列表替换的依赖项。由于它们被替换,具有导入范围的依赖项实际上并不参与限制依赖项的传递性。

备注

Each of the scopes (except for import) affects transitive dependencies in different ways, as is demonstrated in the table below. If a dependency is set to the scope in the left column, transitive dependencies of that dependency with the scope across the top row will result in a dependency in the main project with the scope listed at the intersection. If no scope is listed, it means the dependency will be omitted. 每个scope(除了导入)都会以不同的方式影响传递依赖关系,如下面的表所示。如果将依赖项设置为左列中的范围,则该依赖项与跨顶行的范围的传递依赖项将导致主项目中的依赖项与交叉点列出的范围。如果没有列出范围,则表示依赖项将被省略。

it is intended that this should be runtime scope instead, so that all compile dependencies must be explicitly listed - however, there is the case where the library you depend on extends a class from another library, forcing you to have available at compile time. For this reason, compile time dependencies remain as compile scope even when they are transitive. 这应该是运行时范围,因此必须显式列出所有编译依赖项-但是,您所依赖的库从另一个库扩展了一个类,迫使您在编译时可用。由于这个原因,编译时依赖关系即使在传递时仍然保留为编译范围。

以上内容取自maven官网资料

案例

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>

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

其他关于scope的资料

https://www.jianshu.com/p/a4fc54b5a6bf

https://blog.csdn.net/kimylrong/article/details/50353161

https://howtodoinjava.com/maven/maven-dependency-scopes/

https://www.baeldung.com/maven-dependency-scopes

https://www.tutorialspoint.com/maven/maven_manage_dependencies.htm

本文转载自:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

共有 人打赏支持
晨猫
粉丝 32
博文 412
码字总数 126935
作品 0
杭州
后端工程师
私信 提问
《Maven官方文档》-Maven依赖机制简介

《Maven官方文档》-Maven依赖机制简介 原文地址 译者:Tyrian 依赖机制是Maven最为用户熟知的特性之一,同时也是Maven所擅长的领域之一。单个项目的依赖管理并不难, 但是当你面对包含数百个...

tantexian
12/13
0
0
Maven依赖管理

其中一个Maven的核心特征是依赖管理。管理依赖关系变得困难的任务一旦我们处理多模块项目(包含数百个模块/子项目)。 Maven提供了一个高程度的控制来管理这样的场景。 传递依赖发现 这是很通...

park
2017/11/28
0
0
Dependency介绍

7.1 依赖的传递性 当项目A依赖于B,而B又依赖于C的时候,自然的A会依赖于C,这样Maven在建立项目A的时候,会自动加载对C的依赖。 依赖传递对版本的选择 假设A依赖于B和C,然后B依赖于D,D又依...

zh119893
2014/05/04
212
0
maven依赖总结

1.依赖元素 org.springframeworkspring-core${springframework.version}jarcompile groupId,必选,实际隶属项目 artifactId,必选,其中的模块 version必选,版本号 type可选...

lastsweetop
2013/01/11
0
0
maven依赖总结

1.依赖元素 groupId,必选,实际隶属项目 artifactId,必选,其中的模块 version必选,版本号 type可选,依赖类型,默认jar scope可选,依赖范围,默认compile optional可选,标记依赖是否可选...

dmrs
2015/10/15
23
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据学习之大数据技术笔记—spring入门

篇一 spring介绍 spring.io 官网 快速开始 Aop 面向切面编程,可以任何位置,并且可以细致到方法上 连接框架与框架 Spring 就是 IOC AOP 思想 有效的组织中间层对象一般都是切入 service 层 ...

董黎明
1分钟前
0
0
Linux如何查看进程、杀死进程、启动进程等常用命令

关键字: linux 查进程、杀进程、起进程 1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序。 ps -A 显示所有程序。 ps c 列出程序时,显示每个程...

临江仙卜算子
19分钟前
3
0
ASP.NET Core MVC 静态文件配置

在启动文件中添加以下配置 public class Startup{ public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddDirectoryBrowser(); ......

whltian
29分钟前
1
0
linux之自定义命令

本人使用的是ubuntu系统,不喜欢建各种桌面快捷链接,但是每次启动个软件,去查找又麻烦,所以自定义了命令,来快捷的启动应用: 1、修改/etc/bash.bashrc,在文件末尾,加上如下List-1中的内...

克虏伯
36分钟前
6
0
linux基础

系统安全 sudo su chmod setfacl 进程管理 w top ps kill pkill pstree killall 用户管理 id usermod useradd groupad userdel 文件系统 mount umount fsck df du 网络应用 curl telnet mail......

关元
38分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部