(scope provided) maven依赖关系中的provided使用详解
在 Maven 的依赖关系中,<scope>
元素定义了编译、测试、运行时的类路径的构建方式,以及它对项目的其它阶段是否可用。下面是 <scope>
的五个主要值:
- compile (默认)
- provided
- runtime
- test
- system
<scope>provided</scope>
是其中的一种。 这是一个类似于 compile
的范围,但是假设您不需要在项目的运行时或部署时传递依赖关系。 比如,如果您正在开发一个 Java Servlet,并且 servlet API 包已经由您的servlet 容器提供,那么这个包应该被设置为 provided
范围。
在使用 <scope>provided</scope>
的场景,例如当你在使用JBoss或任何们其他的一个应用服务器,并且这个服务器已经具有例如JDBC这样的框架实现,那么你在编写应用的时候可能需要这个框架做编译研发,但是在最后部署的时候并不需要,因为应用服务器已经提供了。
关于如何配置和使用请参阅如下案例:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
在这个例子中,servlet-api 是默认情况下由大多数的 servlet 容器(例如Tomcat, Jetty, JBoss)提供的。因此,在这个项目中,我们只需要在编译时使用这个api,而不需要将它包含在最后的应用包(war, ear)之中,所以我们将其范围设置为 provided
。
这样在打包的时候,Maven 就不会将它包含在生成的 WAR 文件中,因为我们默认的已经“提供”它了。
需要注意的是,在 provided
范围中的依赖并不会被传递,也就是说,如果项目A依赖于项目B,而项目B又依赖于声明为 provided
的项目C。当项目A去编译的时候,并不会包含项目C。
(uniapp h5) 如何在uniapp项目中嵌套H5 页面 在uniApp项目中嵌套H5页面 全网首发(图文详解1)
(0xc004f074 软件授权服务报告无法激活) win11错误代码0xC004F074无法激活修复的解决办法 Windows 11激活错误代码0xC004F074解决方法 全网首发(图文详解1)