maven依赖关系中的<scope>provided</scope>使用详解

 更新时间:2020年07月16日 17:29:36   作者:陌之殇  
这篇文章主要介绍了maven依赖关系中的<scope>provided</scope>使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

scope的其他参数如下:

compile
默认的scope,表示 dependency 都可以在生命周期中使用。而且,这些dependencies 会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布

provided
跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。这个scope 只能作用在编译和测试时,同时没有传递性。

runtime
表示dependency不作用在编译时,但会作用在运行和测试时,如JDBC驱动,适用运行和测试阶段。 test表示dependency作用在测试时,不作用在运行时。 只在测试时使用,用于编译和运行测试代码。不会随项目发布。 system跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它

今天开发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>

到此这篇关于maven依赖关系中的<scope>provided</scope>使用详解的文章就介绍到这了,更多相关maven依赖<scope>provided</scope>内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

到此这篇关于maven依赖关系中的<scope>provided</scope>使用详解的文章就介绍到这了,更多相关maven依赖<scope>provided</scope>内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java开发只要tomcat设计模式用的好下班就能早

    java开发只要tomcat设计模式用的好下班就能早

    这篇文章主要为大家介绍了java开发只要tomcat设计模式的示例详解,<BR>只要设计模式用的好下班就能早,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Java中通过ZipOutputStream类如何将多个文件打成zip

    Java中通过ZipOutputStream类如何将多个文件打成zip

    ZipOutputStream 是Java中用于创建ZIP文件的类,它是 java.util.zip 包中的一部分,通过使用 ZipOutputStream ,可以将多个文件压缩到一个ZIP文件中,这篇文章主要介绍了Java中(ZipOutputStream)如何将多个文件打成zip,需要的朋友可以参考下
    2023-09-09
  • MyBatis入门程序

    MyBatis入门程序

    MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。接下来本文给大家带来了MyBatis入门程序,感兴趣的朋友一起学习吧
    2016-08-08
  • java String、Json对象与byte数组转换方式

    java String、Json对象与byte数组转换方式

    这篇文章主要介绍了java String、Json对象与byte数组转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • java 方法与数组基础使用详解

    java 方法与数组基础使用详解

    Java语言中的“方法”(Method)在其他语言当中也可能被称为“函数”(Function),数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素
    2022-04-04
  • java解析xml之sax解析xml示例分享

    java解析xml之sax解析xml示例分享

    SAX基于事件的解析,解析器在一次读取XML文件中根据读取的数据产生相应的事件,由应用程序实现相应的事件处理逻辑,即它是一种“推”的解析方式;这种解析方法速度快、占用内存少,但是它需要应用程序自己处理解析器的状态,实现起来会比较麻烦
    2014-01-01
  • eclipse下ini设置详情

    eclipse下ini设置详情

    这篇文章主要介绍了eclipse下ini设置详情,需要的朋友可以参考下
    2017-10-10
  • 浅谈Redis持久化的几种方式

    浅谈Redis持久化的几种方式

    这篇文章主要介绍了浅谈Redis持久化的几种方式,前面说到了Redis持久化的 实现方式主要分为了:快照持久化(RDB)、写日志持久化(AOF)
    ,其中快照持久化方式也就是RDB ,需要的朋友可以参考下
    2023-08-08
  • spring整合kaptcha验证码的实现

    spring整合kaptcha验证码的实现

    这篇文章主要介绍了spring整合kaptcha验证码的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Spring使用Setter完成依赖注入方式

    Spring使用Setter完成依赖注入方式

    这篇文章主要介绍了Spring使用Setter完成依赖注入方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论