maven scope provided和runtime的例子说明

 更新时间:2022年12月19日 09:52:31   作者:pengpengzhou  
这篇文章主要介绍了maven scope provided和runtime的例子说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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>

maven依赖中scope的runtime和provied区别

<scope>runtime</scope>

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

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

<scope>provied</scope>

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

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

案例二:servl

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

总结

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

相关文章

  • Java使用jxl包写Excel文件适合列宽实现

    Java使用jxl包写Excel文件适合列宽实现

    用jxl.jar包,读写过Excel文件。也没有注意最适合列宽的问题,但是jxl.jar没有提供最适合列宽的功能,上次用到写了一下,可以基本实现最适合列宽。
    2013-11-11
  • Java数据结构之List的使用总结

    Java数据结构之List的使用总结

    List是Java中比较常用的集合类,指一系列存储数据的接口和类,可以解决复杂的数据存储问题,本文就来拿实际案例总结介绍一下List的使用方法,感兴趣的朋友快来看看吧
    2021-11-11
  • Java 多线程学习详细总结

    Java 多线程学习详细总结

    本文主要介绍 Java 多线程的知识资料,这里整理了详细的多线程内容,及简单实现代码,有需要的朋友可以参考下
    2016-09-09
  • java.lang.Runtime.exec的左膀右臂:流输入和流读取详解

    java.lang.Runtime.exec的左膀右臂:流输入和流读取详解

    这篇文章主要介绍了java.lang.Runtime.exec的左膀右臂:流输入和流读取详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • IDEA中没有Mapper.xml模板选项的处理方法

    IDEA中没有Mapper.xml模板选项的处理方法

    这篇文章主要介绍了IDEA中没有Mapper.xml模板选项的处理方法,需其实解决方法很简单,只需要在idea中导入模板即可,本文图文的形式给大家分享解决方法,需要的朋友可以参考下
    2021-04-04
  • java读取解析xml文件实例

    java读取解析xml文件实例

    这篇文章主要介绍了java读取解析xml文件实例,本文创建了一个XML解析类同时讲解了循环节点输出方式,需要的朋友可以参考下
    2015-03-03
  • Mac电脑安装多个JDK版本的详细图文教程

    Mac电脑安装多个JDK版本的详细图文教程

    目前使用的主流版本还是JDK 8,但偶尔会想体验下新版本(或者旧版本),如果能装多个版本的JDK,而且很方便的切换就好了,这篇文章主要给大家介绍了关于Mac电脑安装多个JDK版本的相关资料,需要的朋友可以参考下
    2024-03-03
  • 浅谈SpringMVC请求映射handler源码解读

    浅谈SpringMVC请求映射handler源码解读

    这篇文章主要介绍了浅谈SpringMVC请求映射handler源码解读,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 图解Spring Security 中用户是如何实现登录的

    图解Spring Security 中用户是如何实现登录的

    这篇文章主要介绍了图解Spring Security 中用户是如何实现登录的,文中通过示例代码和图片介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 在webservice里调用耗时方法出错的解决方案

    在webservice里调用耗时方法出错的解决方案

    这篇文章主要介绍了在webservice里调用耗时方法出错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论