maven依赖关系中的provided 使用详解
关于maven依赖中的
scope的其他参数如下:
compile
默认的scope,表示dependency都可以在生命周期中使用。而且,这些dependencies会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布
provided
跟compile相似,但是表明了dependency由JDK或者容器提供,例如ServletAP和一些JavaEEAPIs。这个scope只能作用在编译和测试时,同时没有传递性。
runtime
表示dependency不作用在编译时,但会作用在运行和测试时,如JDBC驱动,适用运行和测试阶段。test表示dependency作用在测试时,不作用在运行时。只在测试时使用,用于编译和运行测试代码。不会随项目发布。system跟provided相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它
今天开发web的时候,需要用到servlet-api,于是在pom.xml中添加依赖
javax.servlet servlet-api 3.0-alpha-1
通过插件启动tomcat的时候,报错,里面有一段是这样的:
Causedby:java.lang.LinkageError:loaderconstraintviolation:loader(instanceoforg/apache/catalina/loader/WebappClassLoader)previouslyinitiatedloadingforadifferenttypewithname"javax/servlet/ServletContext" atjava.lang.ClassLoader.defineClass1(NativeMethod) atjava.lang.ClassLoader.defineClass(ClassLoader.java:800) atjava.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) atjava.net.URLClassLoader.defineClass(URLClassLoader.java:449) atjava.net.URLClassLoader.access$100(URLClassLoader.java:71) atjava.net.URLClassLoader$1.run(URLClassLoader.java:361) atjava.net.URLClassLoader$1.run(URLClassLoader.java:355)
产生的原因是:tomcat中也有servlet-api包,这样,发生了冲突
解决方法:添加
javax.servlet servlet-api 3.0-alpha-1 provided
到此这篇关于maven依赖关系中的
到此这篇关于maven依赖关系中的
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。