maven依赖关系中的scopeprovidedscope使⽤详解
关于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,于是在l中添加依赖
<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.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.URLClassLoader.access$100(URLClassLoader.java:71)
servlet和tomcat的关系at java.URLClassLoader$1.run(URLClassLoader.java:361)
at java.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>内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。