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

网友投稿 919 2023-05-12

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

maven依赖关系中的&lt;scope&gt;provided&lt;/scope&gt;使用详解

关于maven依赖中的provided使用

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中添加依赖

javax.servletsiLiR

servlet-api

3.0-alpha-1

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

Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/http://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-.URLClassLoader.defineClass(URLClassLoader.java:449)

at java-.URLClassLoader.access$100(URLClassLoader.java:71)

at java-.URLClassLoader$1.run(URLClassLoader.java:361)

at java-.URLClassLoader$1.run(URLClassLoader.java:355)

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

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

javax.servlet

servlet-api

3.0-alpha-1

provided

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:浅谈spring中isolation和propagation的用法
下一篇:详解SpringCloudGateway内存泄漏问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~