关于maven依赖中的<scope>provided</scope>使用

本文介绍了在Maven项目中如何正确使用<scope>provided</scope>来避免部署时因依赖冲突导致的问题。例如,在使用servlet-api时,如果服务器如Tomcat已自带该API,则可以通过设置<scope>provided</scope>来告知Maven编译器仅在编译阶段使用此依赖。

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

关于maven依赖中的<scope>provided</scope>使用

小麋鹿666  2017-01-06 18:07:00  浏览57  评论0

摘要: 今天开发web的时候,需要用到servlet-api,于是在pom.xml中添加依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.

今天开发web的时候,需要用到servlet-api,于是在pom.xml中添加依赖

<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>3.0-alpha-1</version>
        </dependency>

通过插件启动tomcat的时候,报错,里面有一段是这样的:

复制代码
复制代码
Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/servlet/ServletContext"
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
复制代码
复制代码

产生的原因是:tomcat中也有servlet-api包,这样,发生了冲突

解决方法:添加<scope>provided</scope>,因为provided表明该包只在编译和测试的时候用,所以,当启动tomcat的时候,就不会冲突了,完整依赖如下:

复制代码
复制代码
<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>3.0-alpha-1</version>
            <scope>provided</scope>
        </dependency>
复制代码
&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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值