Maven依赖中scope的runtime和provied的区别及说明

 更新时间:2023年11月13日 17:08:02   作者:fomeiherz  
这篇文章主要介绍了Maven依赖中scope的runtime和provied的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Maven依赖中scope的runtime和provied的区别

<scope>runtime</scope>

runtime 用在 Class.forName(“com.mysql.jdbc.Driver”) 时,compile 编译时不依赖,只有运行时才会依赖。

案例:

当尝试去把 compile -> runtime 后,无法编译成功,因为 runtime 只在运行时使用,编译时不引入,造成有些依赖无法加入。

<scope>provied</scope>

只有编译会使用,程序运行时不需要依赖的。

案例一:

lombok 只在编译时,把 getter、setter 设置好,不需要运行时使用。

案例二:

servlet-api 只在编译时,需要引入,运行时由 tomcat 容器提供。

maven scope provided和runtime的例子

maven常用的scope有compile,provided,runtime,test。

  • complie

是默认值,表示在build,test,runtime阶段的classpath下都有依赖关系。

  • test

表示只在test阶段有依赖关系,例如junit

  • provided

表示在build,test阶段都有依赖,在runtime时并不输出依赖关系而是由容器提供,例如web war包都不包括servlet-api.jar,而是由tomcat等容器来提供

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
  • runtime

表示在构建编译阶段不需要,只在test和runtime需要。

这种主要是指代码里并没有直接引用而是根据配置在运行时动态加载并实例化的情况。

虽然用runtime的地方改成compile也不会出大问题,但是runtime的好处是可以避免在程序里意外地直接引用到原本应该动态加载的包。

例如JDBC连接池:

		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
			<scope>runtime</scope>
		</dependency>

spring applicationContext.xml

	<!-- mysql -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
	</bean>
	<!-- Connection Pool -->
	<bean id="dataSource" destroy-method="close"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${ckm.jdbc.driver}" />
		<property name="url" value="${ckm.jdbc.url}" />
		<property name="username" value="${ckm.jdbc.username}" />
		<property name="password" value="${ckm.jdbc.password}" />
		<property name="initialSize" value="6" />
	</bean>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java中几种常用的HTTP请求工具类举例详解

    java中几种常用的HTTP请求工具类举例详解

    这篇文章主要介绍了java中几种常用的HTTP请求工具类,详细对比了OkHttp、Hutool和RestTemplate三种HTTP客户端工具类的性能和适用场景,文中给出了详细的代码示例,需要的朋友可以参考下
    2025-05-05
  • 浅谈JDK7和JDK8的区别在哪

    浅谈JDK7和JDK8的区别在哪

    面试总是遇到这个问题,做一个小总结,文中有非常详细的介绍,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-06-06
  • Spring如何在一个事务中开启另一个事务

    Spring如何在一个事务中开启另一个事务

    这篇文章主要介绍了Spring如何在一个事务中开启另一个事务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Spring Cloud Gateway 整合 knife4j 聚合接口文档功能

    Spring Cloud Gateway 整合 knife4j 聚合接口文档功能

    这篇文章主要介绍了Spring Cloud Gateway 整合 knife4j 聚合接口文档的相关知识,我们可以基于 Spring Cloud Gateway 网关 + nacos + knife4j 对所有微服务项目的接口文档进行聚合,从而实现我们想要的文档管理功能,需要的朋友可以参考下
    2022-02-02
  • 基于Java制作一个简易的远控终端

    基于Java制作一个简易的远控终端

    这篇文章主要为大家详细介绍了如何基于Java制作一个简易的远控终端,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-04-04
  • Java Stream流之GroupBy的使用方式

    Java Stream流之GroupBy的使用方式

    本教程将详细介绍如何在 Java 中使用 Stream 流的 group by 方法,包括基本用法和一些常见的实际应用场景,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java实现UDP通信过程实例分析【服务器端与客户端】

    Java实现UDP通信过程实例分析【服务器端与客户端】

    这篇文章主要介绍了Java实现UDP通信过程,结合实例形式分析了java实现UDP服务器端与客户端相关操作技巧与注意事项,需要的朋友可以参考下
    2020-05-05
  • SpringBoot应用启动过程分析

    SpringBoot应用启动过程分析

    这篇文章主要介绍了SpringBoot应用启动过程分析,需要的朋友可以参考下
    2017-08-08
  • Javafx简单实现【我的电脑资源管理器】效果

    Javafx简单实现【我的电脑资源管理器】效果

    这篇文章主要介绍了Javafx简单实现【我的电脑资源管理器】效果,涉及Javafx操作系统文件模拟资源管理器的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • java如何更改数据库中的数据

    java如何更改数据库中的数据

    这篇文章主要介绍了java如何更改数据库中的数据,修改数据库是数据库操作必不可少的一部分,使用Statement接口中的excuteUpdate()方法可以修改数据表中的数据,感兴趣的朋友跟随小编一起看看吧
    2021-11-11

最新评论