<scope>provided</scope> 关于maven依赖中的scope的作用和用法

本文详细解析Maven中依赖范围(scope)的概念,包括compile、test、runtime、provided和system等,阐述它们在不同项目阶段的作用及如何影响依赖传递。同时,介绍了如何使用<optional>标签来控制依赖是否传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

举例如下:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
</dependency>

scope的值有以下几种可能,进行分情况讲解:

  • compile

默认就是compile,什么都不配置也就是意味着compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。默认的scope,在部署的时候将会打包到lib目录下,项目在编译,测试,运行阶段都需要

  • test

scope为test表示依赖项目仅仅参与测试相关的工作,在编译和运行环境下都不会被使用,更别说打包了。

  • runntime

runntime这个scope,仅仅适用于运行环境,在编译和测试环境下都不会被使用

  • provided

provided适合在编译和测试的环境,他和compile很接近,但是provide仅仅需要在编译和测试阶段,同样provide将不会被打包到lib目录下。

  • system

从参与度来说,也provided相同,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用

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

为什么需要区分这些scope

可以用来限制dependency的范围可以在不同的环境下打包不同的jar包,比如junit测试类的jar包不需要在编译运行的时候,就可以设置scope为test。

最后还有一个<optional>true</optional>是什么意思,怎么用的呢?

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
</dependency>

例如上面的例子,在SpringBoot官网文件中你可以得到解释就是,<optional>true</optional>的话,其他项目依赖此项目也不会进行传递,只能本项目使用。

此文参考了很多博客的见解以及个人所在官网看到的综合性讲解。感谢各位博主!

&lt;?xml version="1.0" encoding="UTF-8"?> &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> &lt;modelVersion>4.0.0&lt;/modelVersion> &lt;groupId>com.gdsc.bio&lt;/groupId> &lt;artifactId>bio-backend-service&lt;/artifactId> &lt;version>1.1.39&lt;/version> &lt;!-- 定义profile --> &lt;profiles> &lt;!-- 开发环境 --> &lt;profile> &lt;id>dev&lt;/id> &lt;properties> &lt;!-- 定义profileActive属性 --> &lt;profileActive>dev&lt;/profileActive> &lt;/properties> &lt;activation> &lt;activeByDefault>true&lt;/activeByDefault> &lt;/activation> &lt;/profile> &lt;!-- 测试环境 --> &lt;profile> &lt;id>test&lt;/id> &lt;properties> &lt;profileActive>test&lt;/profileActive> &lt;/properties> &lt;/profile> &lt;!-- 生产环境 --> &lt;profile> &lt;id>prod&lt;/id> &lt;properties> &lt;profileActive>release&lt;/profileActive> &lt;/properties> &lt;/profile> &lt;/profiles> &lt;parent> &lt;groupId>org.springframework.boot&lt;/groupId> &lt;artifactId>spring-boot-starter-parent&lt;/artifactId> &lt;version>2.1.3.RELEASE&lt;/version> &lt;relativePath/> &lt;/parent> &lt;dependencies> &lt;!--okhttp--> &lt;dependency> &lt;groupId>com.squareup.okhttp3&lt;/groupId> &lt;artifactId>okhttp&lt;/artifactId> &lt;version>3.14.9&lt;/version> &lt;/dependency> &lt;!--test--> &lt;dependency> &lt;groupId>org.springframework.boot&lt;/groupId> &lt;artifactId>spring-boot-starter-test&lt;/artifactId> &lt;/dependency> &lt;dependency> &lt;groupId>cn.hutool&lt;/groupId> &lt;artifactId>hutool-all&lt;/artifactId> &lt;version>5.0.7&lt;/version> &lt;/dependency> &lt;!--rabbitmq消息队列--> &lt;!--rabbitmq--> &lt;dependency> &lt;groupId>org.springframework.boot&lt;/groupId> &lt;artifactId>spring-boot-starter-amqp&lt;/artifactId> &lt;exclusions> &lt;exclusion> &lt;groupId>org.springframework.boot&lt;/groupId> &lt;artifactId>spring-boot-starter-logging&lt;/artifactId> &lt;/exclusion> &lt;/exclusions> &lt;/dependency> &lt;!-- Lombok --> &lt;dependency> &lt;groupId>org.projectlombok&lt;/groupId> &lt;artifactId>lombok&lt;/artifactId> &lt;/dependency> &lt;!--集成springmvc框架并实现自动配置 --> &lt;dependency> &lt;groupId>org.springframework.boot&lt;/groupId> &lt;artifactId>spring-boot-starter-web&lt;/artifactId> &lt;!-- 排除log4j --> &lt;exclusions> &lt;exclusion> &lt;groupId>org.apache.logging.log4j&lt;/groupId> &lt;artifactId>log4j-to-slf4j&lt;/artifactId> &lt;/exclusion> &lt;exclusion> &lt;groupId>ch.qos.logback&lt;/groupId> &lt;artifactId>logback-classic&lt;/artifactId> &lt;/exclusion> &lt;exclusion> &lt;groupId>ch.qos.logback&lt;/groupId> &lt;artifactId>logback-core&lt;/artifactId> &lt;/exclusion> &lt;/exclusions> &lt;/dependency> &lt;!-- 使用最新的logback --> &lt;dependency> &lt;groupId>ch.qos.logback&lt;/groupId> &lt;artifactId>logback-classic&lt;/artifactId> &lt;version>1.2.10&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>com.gdsc&lt;/groupId> &lt;artifactId>scadp-core&lt;/artifactId> &lt;version>2.48-SNAPSHOT&lt;/version> &lt;!--排除自带的poi--> &lt;exclusions> &lt;exclusion> &lt;groupId>org.apache.poi&lt;/groupId> &lt;artifactId>*&lt;/artifactId> &lt;/exclusion> &lt;/exclusions> &lt;/dependency> &lt;dependency> &lt;groupId>org.springframework&lt;/groupId> &lt;artifactId>spring-orm&lt;/artifactId> &lt;version>3.2.5.RELEASE&lt;/version> &lt;/dependency> &lt;!-- https://mvnrepository.com/artifact/commons-digester/commons-digester --> &lt;dependency> &lt;groupId>commons-digester&lt;/groupId> &lt;artifactId>commons-digester&lt;/artifactId> &lt;version>1.6&lt;/version> &lt;exclusions> &lt;exclusion> &lt;artifactId>commons-beanutils&lt;/artifactId> &lt;groupId>commons-beanutils&lt;/groupId> &lt;/exclusion> &lt;/exclusions> &lt;/dependency> &lt;!-- https://mvnrepository.com/artifact/commons-collections/commons-collections --> &lt;dependency> &lt;groupId>commons-collections&lt;/groupId> &lt;artifactId>commons-collections&lt;/artifactId> &lt;version>3.2.1&lt;/version> &lt;/dependency> &lt;!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --> &lt;dependency> &lt;groupId>commons-beanutils&lt;/groupId> &lt;artifactId>commons-beanutils&lt;/artifactId> &lt;version>1.8.3&lt;/version> &lt;/dependency> &lt;!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all --> &lt;dependency> &lt;groupId>org.codehaus.groovy&lt;/groupId> &lt;artifactId>groovy-all&lt;/artifactId> &lt;version>2.4.12&lt;/version> &lt;/dependency> &lt;!-- https://mvnrepository.com/artifact/com.lowagie/itext --> &lt;dependency> &lt;groupId>com.lowagie&lt;/groupId> &lt;artifactId>itext&lt;/artifactId> &lt;version>2.1.7&lt;/version> &lt;/dependency> &lt;!-- https://mvnrepository.com/artifact/com.lowagie/itextasian --> &lt;dependency> &lt;groupId>com.lowagie&lt;/groupId> &lt;artifactId>itextasian&lt;/artifactId> &lt;version>1.5.2&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>org.jbarcode&lt;/groupId> &lt;artifactId>jbarcode&lt;/artifactId> &lt;version>0.2.8&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>com.belerweb&lt;/groupId> &lt;artifactId>pinyin4j&lt;/artifactId> &lt;version>2.5.0&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>org.freemarker&lt;/groupId> &lt;artifactId>freemarker&lt;/artifactId> &lt;version>2.3.30&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>com.qrcode&lt;/groupId> &lt;artifactId>qrcode&lt;/artifactId> &lt;version>1.0&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>com.lowagie&lt;/groupId> &lt;artifactId>itext-rtf&lt;/artifactId> &lt;version>2.1.7&lt;/version> &lt;/dependency> &lt;!-- Swagger API文档 --> &lt;dependency> &lt;groupId>io.springfox&lt;/groupId> &lt;artifactId>springfox-swagger2&lt;/artifactId> &lt;version>2.9.2&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>io.springfox&lt;/groupId> &lt;artifactId>springfox-swagger-ui&lt;/artifactId> &lt;version>2.9.2&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>com.github.xiaoymin&lt;/groupId> &lt;artifactId>swagger-bootstrap-ui&lt;/artifactId> &lt;version>1.9.3&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>io.springfox&lt;/groupId> &lt;artifactId>springfox-bean-validators&lt;/artifactId> &lt;version>2.9.2&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>org.apache.commons&lt;/groupId> &lt;artifactId>commons-jexl&lt;/artifactId> &lt;version>2.0&lt;/version> &lt;/dependency> &lt;!-- nacos --> &lt;dependency> &lt;groupId>com.alibaba.cloud&lt;/groupId> &lt;artifactId>spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId> &lt;version>2.1.0.RELEASE&lt;/version> &lt;/dependency> &lt;!-- 如果走配置中心需要添加此依赖--> &lt;dependency> &lt;groupId>com.alibaba.cloud&lt;/groupId> &lt;artifactId>spring-cloud-starter-alibaba-nacos-config&lt;/artifactId> &lt;version>2.1.0.RELEASE&lt;/version> &lt;/dependency> &lt;!--&lt;!– https://mvnrepository.com/artifact/com.jfinal/jfinal –>--> &lt;!--&lt;dependency>--> &lt;!--&lt;groupId>com.jfinal&lt;/groupId>--> &lt;!--&lt;artifactId>jfinal&lt;/artifactId>--> &lt;!--&lt;version>3.4&lt;/version>--> &lt;!--&lt;/dependency>--> &lt;!--&lt;!– https://mvnrepository.com/artifact/log4j/log4j –>--> &lt;!--&lt;dependency>--> &lt;!--&lt;groupId>log4j&lt;/groupId>--> &lt;!--&lt;artifactId>log4j&lt;/artifactId>--> &lt;!--&lt;version>1.2.17&lt;/version>--> &lt;!--&lt;/dependency>--> &lt;!--&lt;dependency>--> &lt;!--&lt;groupId>org.slf4j&lt;/groupId>--> &lt;!--&lt;artifactId>slf4j-api&lt;/artifactId>--> &lt;!--&lt;version>1.7.25&lt;/version>--> &lt;!--&lt;/dependency>--> &lt;!--&lt;!– https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api –>--> &lt;!--&lt;dependency>--> &lt;!--&lt;groupId>javax.servlet&lt;/groupId>--> &lt;!--&lt;artifactId>javax.servlet-api&lt;/artifactId>--> &lt;!--&lt;version>3.1.0&lt;/version>--> &lt;!--&lt;scope&gt;provided&lt;/scope&gt;--> &lt;!--&lt;/dependency>--> &lt;!-- scadp-service-api --> &lt;!-- &lt;dependency>--> &lt;!-- &lt;groupId>com.gdsc&lt;/groupId>--> &lt;!-- &lt;artifactId>scadp-service-api&lt;/artifactId>--> &lt;!-- &lt;version>1.0.2-SNAPSHOT&lt;/version>--> &lt;!-- &lt;/dependency>--> &lt;!-- xxl-job-core --> &lt;dependency> &lt;groupId>com.xuxueli&lt;/groupId> &lt;artifactId>xxl-job-core&lt;/artifactId> &lt;version>2.3.0&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>net.sf.jxls&lt;/groupId> &lt;artifactId>jxls-core&lt;/artifactId> &lt;version>1.0.1&lt;/version> &lt;!--排除自带的poi--> &lt;exclusions> &lt;exclusion> &lt;groupId>org.apache.poi&lt;/groupId> &lt;artifactId>*&lt;/artifactId> &lt;/exclusion> &lt;/exclusions> &lt;/dependency> &lt;dependency> &lt;groupId>org.apache.poi&lt;/groupId> &lt;artifactId>poi&lt;/artifactId> &lt;version>3.17&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>org.apache.poi&lt;/groupId> &lt;artifactId>poi-ooxml&lt;/artifactId> &lt;version>3.17&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>org.apache.commons&lt;/groupId> &lt;artifactId>commons-jexl3&lt;/artifactId> &lt;version>3.1&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>org.apache.poi&lt;/groupId> &lt;artifactId>poi&lt;/artifactId> &lt;version>4.1.2&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>org.apache.poi&lt;/groupId> &lt;artifactId>poi-ooxml&lt;/artifactId> &lt;version>4.1.2&lt;/version> &lt;/dependency> &lt;dependency> &lt;groupId>com.alibaba&lt;/groupId> &lt;artifactId>easyexcel&lt;/artifactId> &lt;version>4.0.3&lt;/version> &lt;!--排除自带的poi--> &lt;!-- &lt;exclusions>--> &lt;!-- &lt;exclusion>--> &lt;!-- &lt;groupId>org.apache.poi&lt;/groupId>--> &lt;!-- &lt;artifactId>*&lt;/artifactId>--> &lt;!-- &lt;/exclusion>--> &lt;!-- &lt;/exclusions>--> &lt;/dependency> &lt;!-- 日志 --> &lt;!-- logback-classic --> &lt;!-- &lt;dependency>--> &lt;!-- &lt;groupId>ch.qos.logback&lt;/groupId>--> &lt;!-- &lt;artifactId>logback-classic&lt;/artifactId>--> &lt;!-- &lt;/dependency>--> &lt;!-- skywalking的logback依赖 --> &lt;dependency> &lt;groupId>org.apache.skywalking&lt;/groupId> &lt;artifactId>apm-toolkit-logback-1.x&lt;/artifactId> &lt;version>8.7.0&lt;/version> &lt;/dependency> &lt;!--与logstash对应的日志收集依赖--> &lt;dependency> &lt;groupId>net.logstash.logback&lt;/groupId> &lt;artifactId>logstash-logback-encoder&lt;/artifactId> &lt;version>4.10&lt;/version> &lt;/dependency> &lt;/dependencies> &lt;build> &lt;finalName>${project.name}-${project.version}-${profileActive}&lt;/finalName> &lt;plugins> &lt;plugin> &lt;groupId>org.apache.maven.plugins&lt;/groupId> &lt;artifactId>maven-shade-plugin&lt;/artifactId> &lt;version>3.3.0&lt;/version> &lt;executions> &lt;execution> &lt;phase>package&lt;/phase> &lt;goals> &lt;goal>shade&lt;/goal> &lt;/goals> &lt;configuration> &lt;artifactSet> &lt;includes> &lt;include>net.sf.jxls:jxls-core&lt;/include> &lt;include>org.apache.poi:poi&lt;/include> &lt;include>org.apache.poi:poi-ooxml&lt;/include> &lt;/includes> &lt;/artifactSet> &lt;relocations> &lt;relocation> &lt;pattern>org.apache.poi&lt;/pattern> &lt;shadedPattern>shaded.jxls.poi&lt;/shadedPattern> &lt;/relocation> &lt;/relocations> &lt;transformers> &lt;!-- 1. 处理 Manifest 文件 --> &lt;transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer&quot;/> &lt;!-- 2. 合并 Service Loader 文件 --> &lt;transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer&quot;/> &lt;!-- 3. 合并其他资源文件(如 spring.handlers) --> &lt;transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> &lt;resource>META-INF/spring.handlers&lt;/resource> &lt;/transformer> &lt;/transformers> &lt;/configuration> &lt;/execution> &lt;/executions> &lt;/plugin> &lt;plugin> &lt;groupId>org.springframework.boot&lt;/groupId> &lt;artifactId>spring-boot-maven-plugin&lt;/artifactId> &lt;/plugin> &lt;!--&lt;plugin> &lt;groupId>org.springframework.boot&lt;/groupId> &lt;artifactId>spring-boot-maven-plugin&lt;/artifactId> &lt;/plugin> 指定JDK编译版本 --> &lt;plugin> &lt;groupId>org.apache.maven.plugins&lt;/groupId> &lt;artifactId>maven-compiler-plugin&lt;/artifactId> &lt;configuration> &lt;source>1.8&lt;/source> &lt;target>1.8&lt;/target> &lt;encoding>UTF-8&lt;/encoding> &lt;/configuration> &lt;/plugin> &lt;!-- 打包跳过测试 --> &lt;plugin> &lt;groupId>org.apache.maven.plugins&lt;/groupId> &lt;artifactId>maven-surefire-plugin&lt;/artifactId> &lt;configuration> &lt;skipTests>true&lt;/skipTests> &lt;/configuration> &lt;/plugin> &lt;!-- 避免font文件的二进制文件格式压缩破坏 --> &lt;plugin> &lt;groupId>org.apache.maven.plugins&lt;/groupId> &lt;artifactId>maven-resources-plugin&lt;/artifactId> &lt;configuration> &lt;nonFilteredFileExtensions> &lt;nonFilteredFileExtension>jasper&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>jrxml&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>xls&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>xlsx&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>ftl&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>doc&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>docx&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>woff&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>woff2&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>eot&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>ttf&lt;/nonFilteredFileExtension> &lt;nonFilteredFileExtension>svg&lt;/nonFilteredFileExtension> &lt;/nonFilteredFileExtensions> &lt;/configuration> &lt;/plugin> &lt;/plugins> &lt;resources> &lt;resource> &lt;directory>src/main/java&lt;/directory> &lt;includes> &lt;include>**/*.xls&lt;/include> &lt;include>**/*.xlsx&lt;/include> &lt;include>**/*.xml&lt;/include> &lt;include>**/*.json&lt;/include> &lt;include>**/*.ftl&lt;/include> &lt;/includes> &lt;/resource> &lt;!--&lt;resource> &lt;directory>src/main/resources/template&lt;/directory> &lt;/resource> &lt;resource> &lt;directory>src/main/resources/watermark&lt;/directory> &lt;/resource> &lt;resource> &lt;directory>src/main/resources/additional&lt;/directory> &lt;/resource>--> &lt;resource> &lt;directory>src/main/resources&lt;/directory> &lt;filtering>true&lt;/filtering> &lt;excludes> &lt;exclude>**/*.xls&lt;/exclude> &lt;exclude>**/*.xlsx&lt;/exclude> &lt;/excludes> &lt;/resource> &lt;resource> &lt;directory>src/main/resources&lt;/directory> &lt;filtering>false&lt;/filtering> &lt;includes> &lt;include>**/*.xml&lt;/include> &lt;include>**/*.xls&lt;/include> &lt;include>**/*.xlsx&lt;/include> &lt;include>**/*.jasper&lt;/include> &lt;include>**/*.jrxml&lt;/include> &lt;/includes> &lt;/resource> &lt;/resources> &lt;/build> &lt;/project> Cannot find 'resource' in class org.apache.maven.plugins.shade.resource.ManifestResourceTransformer
最新发布
06-18
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值