返回顶部
首页 > 资讯 > 后端开发 > Python >Maven依赖中scope的含义
  • 233
分享到

Maven依赖中scope的含义

Mavenscope 2023-01-15 15:01:45 233人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

scope元素的作用:控制 dependency 元素的使用范围。通俗的讲,就是控制 jar 包在哪些范围被加载和使用。 scope具体含义如下: compile(默认)含义:com

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 文件的路径。例如:

<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>

import
它只使用在<dependencyManagement>中,表示从其它的pom中导入dependency的配置,例如 (B项目导入A项目中的包配置):

想必大家在做SpringBoot应用的时候,都会有如下代码:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.3.RELEASE</version>
</parent>

继承一个父模块,然后再引入相应的依赖。
假如说,我不想继承,或者我想继承多个,怎么做?

我们知道Maven的继承和Java的继承一样,是无法实现多重继承的,如果10个、20个甚至更多模块继承自同一个模块,那么按照我们之前的做法,这个父模块的dependencyManagement会包含大量的依赖。如果你想把这些依赖分类以更清晰的管理,那就不可能了,import scope依赖能解决这个问题。你可以把dependencyManagement放到单独的专门用来管理依赖的pom中,然后在需要使用依赖的模块中通过import scope依赖,就可以引入dependencyManagement。例如可以写这样一个用于依赖管理的pom:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test.sample</groupId>
    <artifactId>base-parent1</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactid>junit</artifactId>
                <version>4.8.2</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactid>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

然后我就可以通过非继承的方式来引入这段依赖管理配置

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.test.sample</groupId>
            <artifactid>base-parent1</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
 
<dependency>
    <groupId>junit</groupId>
    <artifactid>junit</artifactId>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactid>log4j</artifactId>
</dependency>

注意:import scope只能用在dependencyManagement里面

这样,父模块的pom就会非常干净,由专门的packaging为pom来管理依赖,也契合的面向对象设计中的单一职责原则。此外,我们还能够创建多个这样的依赖管理pom,以更细化的方式管理依赖。这种做法与面向对象设计中使用组合而非继承也有点相似的味道。

那么,如何用这个方法来解决SpringBoot的那个继承问题呢?

配置如下:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.3.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
 
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

这样配置的话,自己的项目里面就不需要继承SpringBoot的module了,而可以继承自己项目的module了。

scope的依赖传递

A–>B–>C。当前项目为A,A依赖于B,B依赖于C。知道B在A项目中的scope,那么怎么知道C在A中的scope呢?答案是:
当C是test或者provided时,C直接被丢弃,A不依赖C;
否则A依赖C,C的scope继承于B的scope。

下面是一张nexus画的图。

 到此这篇关于Maven依赖中scope的含义的文章就介绍到这了,更多相关Maven scope内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Maven依赖中scope的含义

本文链接: https://lsjlt.com/news/177812.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Maven依赖中scope的含义
    scope元素的作用:控制 dependency 元素的使用范围。通俗的讲,就是控制 jar 包在哪些范围被加载和使用。 scope具体含义如下: compile(默认)含义:com...
    99+
    2023-01-15
    Maven scope
  • MavenOptional依赖属性的含义及妙用
    目录什么是Maven Optional依赖?为什么需要Maven Optional依赖?减少依赖传递避免依赖冲突减少构建大小Maven Optional依赖的妙用场景1:降低库的依赖...
    99+
    2023-05-19
    Maven Optional依赖属性 Maven Optional
  • maven怎么排除依赖包的子依赖
    在Maven中,排除依赖包的子依赖可以通过在pom.xml文件中使用标签来实现。例如,假设要排除spring-boot-starte...
    99+
    2023-09-23
    maven
  • maven如何排除依赖包的子依赖
    在Maven中,可以使用``元素来排除依赖包的子依赖。在POM文件中,找到需要排除子依赖的依赖项,然后添加``元素,指定需要排除的子...
    99+
    2023-09-29
    maven
  • maven依赖 pom.xml中systemPath的用法
    今天在给一个小伙伴配置项目中有一个jar包依赖怎么就下载不下来,关键是我使用他的maven本地仓库打包还报错。首先这个依赖maven官网仓库是存在的,也是可以下载的,但是他本地就是下载不下来。尝试了很多的方法,搞笑的是还给他重新安装了另一个...
    99+
    2023-10-06
    maven xml java
  • 怎么排除Maven依赖项的传递性依赖
    有以下几种方法可以排除Maven依赖项的传递性依赖: 使用元素:在pom.xml文件中,可以使用元素排除指定依赖项的传递性依赖。例...
    99+
    2024-04-09
    Maven
  • maven添加oracle的依赖驱动
    maven添加oracle的依赖驱动 目录1、下载需要的jdbc jar 包2、下载jar包3、在当前目录下输入cmd进入控制台4、控制台输入 命令解释5、执行后有如下就表示成功6、在mave...
    99+
    2021-11-04
    maven添加oracle的依赖驱动
  • Maven实现自己的starter依赖
    目录1. 准备工作1.1 创建一个项目1.2 修改pom文件1.3 修改项目结构2. 动手实现2.1 创建客户端类2.2 创建配置类2.3 配置路径2.4 下载到本地仓库3. 测试1...
    99+
    2023-05-15
    Maven starter依赖 Maven starter
  • 解决IDEA中maven依赖报红的问题
    一、问题描述 在使用IDEA进行编程时,发现maven依赖中有很多报红现象,如下图所示: 虽然不太影响项目运行,但也确实是个问题 原因:造成这种现象主要原因就是由于网络原因导致没有将Maven的...
    99+
    2023-09-05
    intellij-idea maven java
  • springboot中maven配置依赖的示例分析
    这篇文章主要介绍springboot中maven配置依赖的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:我们通过引用spring-boot-starter-parent,添加spring-boot-...
    99+
    2023-05-30
    springboot maven
  • 解决Maven依赖冲突的方法
    目录背景处理回顾背景 在项目中screw-core依赖时发生了冲突,控制台指出是log4j产生的依赖冲突,导致程序报错无法运行,是一个典型的maven依赖冲突,基于这个问题进行 处理...
    99+
    2023-05-20
    Maven依赖冲突
  • Maven依赖管理的用法介绍
    目录一、依赖传递1. 直接依赖与间接依赖2. 依赖传递冲突时的优先规则(1) 路径优先(2) 声明优先(3) 后声明覆盖先声明二、依赖管理1. 可选依赖2. 排除依赖3. 可选依赖与...
    99+
    2024-04-02
  • Maven的传递性依赖是什么
    Maven的传递性依赖指的是当一个项目依赖于另一个项目时,如果被依赖的项目又依赖于其他项目,那么这些依赖也会被自动引入到当前项目中。...
    99+
    2024-04-09
    Maven
  • 如何解决angularjs service中依赖注入$scope报错的问题
    小编给大家分享一下如何解决angularjs service中依赖注入$scope报错的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!控制台错误提示ionic.bundle.js:26...
    99+
    2024-04-02
  • 使用Maven中的scope总结
    目录Maven中的scope总结Maven中的scope主要有以下6种Maven中<scope>参数</scope>配置解决maven项目中无法打包生成空文件夹的问题Maven中的s...
    99+
    2024-04-02
  • maven项目的依赖树怎么生成
    这篇文章主要讲解了“maven项目的依赖树怎么生成”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“maven项目的依赖树怎么生成”吧!1、mvn 依赖:树该命令生成maven项目的依赖树。$&...
    99+
    2023-06-26
  • maven依赖的version声明控制方式
    目录maven依赖的version声明控制下面以springcloud的注册中心模块举例maven设置依赖version属性1、加入profiles2、version处用${name...
    99+
    2024-04-02
  • Maven怎么实现自己的starter依赖
    本篇内容主要讲解“Maven怎么实现自己的starter依赖”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Maven怎么实现自己的starter依赖”吧!1. 准备工作1.1 创建一个项目打开i...
    99+
    2023-07-06
  • IDEA中Java项目创建lib目录(添加依赖jar包代替maven依赖)
    文章目录 1.右键点击项目,创建一个普通的文件夹2.取名为lib3.把项目所需的jar包复制到lib文件夹下4.然后Add as Library…构建项目所需的jar包5.点击ok(完成jar...
    99+
    2023-09-23
    intellij-idea java maven
  • 【Maven】依赖管理—导入jar包的三种方式、依赖范围设置
    目录 一、使用坐标导入 jar 包  二、使用坐标导入 jar 包 – 快捷方式  三、使用坐标导入 jar 包 – 自动导入  四、依赖范围 一、使用坐标导入 jar 包 在 pom.xml 中编写 标签 在 标签中 使用 引入坐...
    99+
    2023-09-15
    maven jar java intellij-idea 坐标导入依赖
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作