Maven:浅析依赖(dependency)关系中 scope 的含义

在 Pom4 中,dependency 元素中引入了 scope 元素,这是一个很重要的属性。在Maven 项目中 Jar 包冲突、类型转换异常的很大原因是由于 scope 元素使用不当造成的。
scope 元素的作用:控制 dependency 元素的使用范围。通俗的讲,就是控制 Jar 包在哪些范围被加载和使用。
scope 包含五个值,具体含义如下:

compile(编译)

含义:compile 是默认值,如果没有指定 scope 值,该元素的默认值为 compile。被依赖项目需要参与到当前项目的编译,测试,打包,运行等阶段。打包的时候通常会包含被依赖项目。

provided(已提供的)

含义:被依赖项目理论上可以参与编译、测试、运行等阶段,相当于compile,但是再打包阶段做了exclude的动作。
适用场景:例如, 如果我们在开发一个web 应用,在编译时我们需要依赖 servlet-api.jar,但是在运行时我们不需要该 jar 包,因为这个 jar 包已由应用服务器提供,此时我们需要使用 provided 进行范围修饰。

runtime(运行时)

含义:表示被依赖项目无需参与项目的编译,但是会参与到项目的测试和运行。与compile相比,被依赖项目无需参与项目的编译。
适用场景:例如,在编译的时候我们不需要 JDBC API 的 jar 包,而在运行的时候我们才需要 JDBC 驱动包。

test(测试)

含义: 表示被依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。
适用场景:例如,Junit 测试。

system(系统)

含义:system 元素与 provided 元素类似,但是被依赖项不会从 maven 仓库中查找,而是从本地系统中获取,systemPath 元素用于制定本地系统中 jar 文件的路径。也就是说,在编译时使用 systemPath 元素指定的 jar 包,在运行时由应用服务器提供 jar 包。
适用场景:项目中存在自定义的基础组件服务时使用。例如:

<dependency>
    <groupId>org.open</groupId>
    <artifactId>open-core</artifactId>
    <version>1.5</version>
    <scope>system</scope>
    <systemPath>${basedir}/WebContent/WEB-INF/lib/open-core.jar</systemPath>
</dependency>

原文https://blog.csdn.net/claram/article/details/77646263

原文地址:https://www.cnblogs.com/diffx/p/9889964.html

时间: 2024-10-19 12:54:03

Maven:浅析依赖(dependency)关系中 scope 的含义的相关文章

maven依赖关系中Scope的作用

Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用5个值: * compile,缺省值,适用于所有阶段,会随着项目一起发布.     * provided,类似compile,期望JDK.容器或使用者会提供这个依赖.如servlet.jar.     * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段.     * test,只在测试时使用,用于编译和运

7.maven配置文件中&lt;scope&gt;的6种配置属性解释(源自官方文档) -- 依赖的范围

7.maven配置文件中<scope>的6中配置属性解释 说明:我们知道在pom.xml中<scope>标签是设置依赖作用域的,那么具体的设置类型有哪几种,分别作用的什么时候呢? 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

[转]使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://repo1.maven.org/maven2 。

使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://repo1.maven.org/maven2 . 解决方式如下: 1.通过其它方式下载如下两个文件: http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties http://repo1.maven.org/m

maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)

我们知道,maven的依赖关系是有传递性的.如:A-->B,B-->C.但有时候,项目A可能不是必需依赖C,因此需要在项目A中排除对A的依赖.在maven的依赖管理中,有两种方式可以对依赖关系进行,分别是可选依赖(Optional Dependencies)以及依赖排除(Dependency Exclusions). 一.可选依赖 当一个项目A依赖另一个项目B时,项目A可能很少一部分功能用到了项目B,此时就可以在A中配置对B的可选依赖.举例来说,一个类似hibernate的项目,它支持对mys

Maven之依赖关系

在maven的管理体系中,各个项目组成了一个复杂的关系网,但是每个项目都是平等的,是个没有贵贱高低,众生平等的世界,全球每个项目从理论上来说都可以相互依赖.就是说,你跟开发Spring的大牛们平起平坐,你的项目可以依赖Spring项目,Spring项目也可以依赖你的项目(虽然现实中不太会发生,你倒贴钱人家也不敢引用). 项目的依赖关系主要分为三种:依赖,继承,聚合 依赖关系 依赖关系是最常用的一种,就是你的项目需要依赖其他项目,比如Apache-common包,Spring包等等. [html]

创建第二个 maven (依赖的使用)(注:这篇博文与上一篇博文内容关系密切)

1.第二个工程的创建: a.它的目录层次结构为下图所示: 注:第二个 maven 工程和第一个maven 工程保存的目录一样,和 .metadata同在一个目录下. b.pom.xml文件 以及 HelloFriend.java 和 HelloFriendTest.java 文件填写的内容为: <?xml version="1.0" ?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns

在 eclipse中 创建 web 版的 maven 工程以及 进一步了解 pom.xml 中 scope 的相关配置设置问题

1.在 eclipse中 创建 web 版的 maven 工程: a.和 创建 java 版的 maven 工程一样,先选中一个简单的工程(跳过经典模式),后填写坐标(不了解的看先前的博文),在打包方式中选择 war 包,后点击 finish. b.可以看到,在新建 的 javaproject03 的 项目中,只有 webapp目录,而实际的内容并没有.这里我们在每次新建时都要做设置.设置如下: 注:鼠标停在所建的项目上,点击右键进入 properties --> Project Facets

maven 中scope 的应用

maven 中scope 定义了这个包的应用范围,根据场景不同某些jar的应用也不同,scope 有5种类型: 以下内容是转帖复制: 一.compile:编译范围compile是默认的范围:如果没有提供一个范围,编译范围依赖在所有的classpath 中可用,同时它们也会被打包.而且这些dependency会传递到依赖的项目中. 二.provided:已提供范围provided 明了dependency 由JDK或者容器提供.例如如果开发了一个web 应用,可能在编译 classpath 中需要

eclipse插件Maven添加依赖查询无结果的解决方法(Select Dependency doesn&#39;t work)

在eclipse中用过maven的可能都遇到过这种情况,我以前一直在search.maven里面搜索,然后添加pom信息. 今天在网上搜索时,找到了一个解决方法,在这里分享一下. 第一步,在preferences里面选择maven,选中"Download repository index updates on startup" 第二步,打开Maven仓库 第三步,在全局仓库上右键选择"Full Index Enabled" 选择之后,maven会下载一个近百兆的索引