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

匿名 (未验证) 提交于 2019-12-02 23:47:01

关于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>

今天开发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>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!