当前位置: 首页 > news >正文

Maven scope属性解读和使用注意事项

目录

compile

runtime

test

system

provided

import

dependencyManagement标签介绍


maven的scope有哪些:

maven的scope一共包括:compile、runtime、test、system、provided、import。

compile

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.4.1</version><scope>compile</scope></dependency>

compile是默认值,当我们引入依赖时,如果标签没有指定,那么默认就是complie。

compile表示被依赖项目需要参与当前项目的编译,包括后续的测试,运行周期也参与其中,同时打包的时候也会包含进去。是最常用的,所以也是默认的。

runtime

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version><scope>runtime</scope></dependency>

runtime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已。

数据库的驱动包一般都是runtime,因为在我们在编码时只会使用JDK提供的jdbc接口,而具体的实现是有对应的厂商提供的驱动(如mysql驱动),实在运行时生效的,所以这类jar包无需参与项目的编译。

test

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

test表示只会在测试阶段使用,在src/main/java里面的代码是无法使用这些api的,并且项目打包时,也不会将"test"标记的打入"jar"包或者"war"包。

system

<dependency><groupId>com.mytest</groupId><artifactId>test</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/lib/test-1.0.jar</systemPath></dependency>

system依赖不是由maven仓库,而是本地的jar包,因此必须配合systemPath标签来指定本地的jar包所在全路径。这类jar包默认会参与编译、测试、运行,但是不会被参与打包阶段。如果也想打包进去的话,需要在插件里做配置<includeSystemScope>true</includeSystemScope>。详细如下:

如果你仅仅是这么做了,在你使用SpringBoot打包插件生成jar包的时候,你会发现这个jar包不会被打进去,进而出现错误。如mybatis接口包,其他一般不会有问题。

这个就需要在maven插接中配置一个includeSystemScope属性:

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--设置为true,以便把本地的system的jar也包括进来--><includeSystemScope>true</includeSystemScope></configuration></plugin>

还有一点,本地jar依赖的jar,需要重新配置下。

provided

<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency>

provided表示的是在编译和测试的时候有效,在执行(mvn package)进行打包成war、jar包的时候不会加入,比如:servlet-api,因为servlet-api,tomcat等web服务器中已经存在,如果在打包进去,那么包之间就会冲突

import

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

dependencyManagement 中type scope默认值如上,可以不加。

dependencyManagement标签介绍

dependencyManagement标签,用法如下:

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud-version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

为什么要使用这个呢?maven官方给出的解释是:为了统一模块之间的依赖的版本。

有以下特点:

在父pom文件中声明

子模块中需要显式的声明,才会继承该依赖。

子模块如何需要继承该依赖,不需要指明版本,直接从父pom中获取版本号。

举个?:

顶层的父pom.xml文件:

<dependencyManagement>     <dependencies>       <dependency>           <groupId>javax</groupId>              <artifactId>javaee-api</artifactId>          <version>${javaee-api.version}</version>            </dependency>  </dependencies></dependencyManagement>子模块中的pom.xml<!--继承父类--> <parent> <artifactId>父artifactId</artifactId> <groupId>父groupId</groupId> <version>父version</version> <relativePath>父pom.xml的相对路径</relativePath> </parent> <!--依赖关系--> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId></dependency> </dependencies>

dependencies与dependencyManagement区别总结

1、dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)

2、dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

相关文章:

Maven scope属性解读和使用注意事项

目录 compile runtime test system provided import dependencyManagement标签介绍 maven的scope有哪些&#xff1a; maven的scope一共包括&#xff1a;compile、runtime、test、system、provided、import。 compile <dependency><groupId>org.apache.htt…...

Vue3使用 xx UI解决布局高度自适应

解决方案 在相应的Sider部分添加&#xff1a;height: ‘91.8vh’&#xff0c;即可。示例&#xff1a; <Layout><Sider hide-trigger :style"{background: #fff, height: 91.8vh}"> }知识补充 vw、vh、vmin、vmax是一种视窗单位&#xff0c;也是相对单…...

九牧:科技卫浴,长期主义

“没有做错什么&#xff0c;但却输给了时代”&#xff0c;这是人们给当年手机巨头诺基亚的注解。 谁也没有想到&#xff0c;曾在手机行业称雄的诺基亚&#xff0c;最终败给了时代。当年&#xff0c;在2G向3G、4G跨越的时候&#xff0c;苹果、微软的iOS和安卓系统将手机从简单的…...

中级软件设计师-note-2

一个逆向思维的例子是 “当遇到一个问题时&#xff0c;通常人们会想办法解决这个问题。但逆向思维是指反过来考虑&#xff0c;即想办法制造更多的问题。 举个例子&#xff0c;假设有一个团队正在开发一款新的智能手机。传统的思维方式可能是专注于如何增加手机的功能&#xf…...

解锁商业宝藏:迅软科技答疑保护商业秘密的重要性

商业秘密指不为公众所知悉、具有商业价值并经权利人采取相应保密措施的技术信息、经营信息等商业信息&#xff0c;一旦泄露可能会给公司带来极大的经济损失和竞争压力&#xff0c;保护商业秘密既能维护企业自身合法权益&#xff0c;也能保障市场经济长期健康发展需求。 保护商…...

【GIT】撤销命令

git add 撤销 add 错误文件&#xff0c;撤销掉add列表的文件使用&#xff1a; git reset [文件名] 撤销单个文件 git reset . 撤销全部 git commit 撤销 commit 之后&#xff0c;但是还没有push 可以用撤回刚刚的commit 记录 git reset HEAD~ git log -v 查看提交记录...

开发知识点-09Rust

Rust Rust 语言通常用于编写系统级软件、网络服务器和高性能应用程序&#xff0c;它具有以下特点&#xff1a;1. 高性能和内存安全&#xff1a;Rust 在保证高性能的同时&#xff0c;利用其所有权模型和借用检查器等特性确保内存安全&#xff0c;避免了 C/C 等语言的内存错误和崩…...

Android开发中,百度语音集成之一

我们在开发中&#xff0c;用到实时语音的时候&#xff0c;会有讯飞、百度、阿里&#xff0c;今天主要讲解的是百度语音之语音合成&#xff1a; public class YuYinUtil { private static final Logger logger LogManager.getLogger(YuYinUtil.class); public static final St…...

nodejs连接mongodb报错SyntaxError: Unexpected token .

nodejs连接mongodb报错SyntaxError: Unexpected token 如下图 经过排查&#xff0c;原因是npm默认安装的mongodb插件是最新版6.3.0 &#xff0c;而mongodb数据库版本是4.0.0 &#xff0c;两者版本不同导致nodejs报错。 解决方法是npm卸载新版本的mongodb插件&#xff0c;再安…...

Ubuntu 常用命令之 gunzip 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 gunzip是一个在Ubuntu系统下用于解压缩文件的命令。它主要用于解压.gz格式的文件。这个命令是gzip命令的反向操作&#xff0c;gzip用于压缩文件&#xff0c;而gunzip则用于解压缩文件。 gunzip命令的参数有 -c 或 --stdout 或 -…...

sun.misc.BASE64Encoder 进行maven打包时报错

报错如下&#xff1a; 报错代码&#xff0c;是因为引用了sun.misc.BASE64Decoder等类不属于JDK标准库范畴&#xff0c;但在JDK中包含了该类&#xff0c;可以直接使用。在jdk1.9中就不存在了。 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;BASE64Encoder enc…...

[DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案

[网络故障] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案 问题描述 最近&#xff0c;我在使用CSDN插件浏览 MOOC 网站时&#xff0c;遇到了一些网络故障。具体表现为&#xff1a; MOOC 中国大学慕课网&#xff1a;www.icourse163.org点击CSDN插件首页的 MOOC&#xff08…...

CSS设计器的使用

目录 css的概念 css的优势 css的基本语法 html中引入css样式 CSS基本选择器 选择器的使用 初级选择器&#xff1a; 标签选择器 类选择器 id选择器 高级选择器(结构选择器&#xff09; ①后代选择器(E F) ②子选择器(E>F) ③相邻兄弟选择器(EF) ④通用兄弟选择器(…...

3d渲染太慢怎么办?2024效果图云渲染AI加速来袭

在不断变革的数码技术世界中&#xff0c;三维渲染技术在影视制作、游戏开发以及建筑设计等多个领域得到了广泛运用。然而&#xff0c;高清质量的三维项目的离线渲染时间长久一直是困扰 CG 工作者的一大难题。通常来讲&#xff0c;渲染一帧画面可能需要几分钟到几小时&#xff0…...

指针函数函数指针回调函数相关知识

指针函数&#xff1a; 本质上是一个函数&#xff0c;返回值是一个指针类型&#xff1b;不能返回局部变量的地址&#xff0c;因为其所存储在栈区&#xff0c;在函数调用结束时&#xff0c;被OS回收了&#xff1b;可以返回的情况&#xff1a;全局变量的地址、static修饰的局部变…...

软件设计模式:六大设计原则

文章目录 前言一、开闭原则二、里氏替换原则三、依赖倒转原则四、接口隔离五、迪米特法则六、合成复用原则总结 前言 在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&am…...

Unity闪屏Logo去除

1.新建一个C#脚本&#xff0c;命名为 “SkipSplashScreen” &#xff08;代码如下&#xff09;。 using System.Collections; using System.Collections.Generic; using System; using UnityEngine; using UnityEngine.UI;#if !UNITY_EDITOR using UnityEngine; using UnityEn…...

Git账户密码http方式的配置

Git账户密码http方式的配置 入门 git在提交时每次都需要输入密码和账号信息&#xff0c;可以将账号和密码进行持久化存储&#xff0c; 当git push的时候输入一次用户名和密码就会被记录&#xff0c; 不需要每次输入&#xff0c;提高效率&#xff0c;进行一下配置&#xff1…...

【JUC】三十二、邮戳锁StampedLock

文章目录 1、邮戳锁2、锁饥饿问题的解决思路3、邮戳锁的特点4、代码演示&#xff1a;邮戳锁的传统读写用法5、代码演示&#xff1a;邮戳锁之乐观读6、邮戳锁的缺点7、终章回顾 前面提到了从无锁 ⇒ 独占锁 ⇒ 读写锁&#xff0c;但读写锁存在写锁饥饿的情况。 &#x1f4d5;【读…...

城市里的“蛋壳运动空间”

近年来&#xff0c;秉承"发展群众体育&#xff0c;服务健康中国”的理念&#xff0c;全国各地持续推进全民健身与全民健康的融合发展。越来越多的口袋公园、户外运动设施出现在城市各个角落&#xff0c;一定程度上提升了全民运动的便利性和幸福感。 但是&#xff0c;遇到…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...