首页 > 其他分享 >Maven依赖中的scope总结

Maven依赖中的scope总结

时间:2023-06-13 12:00:44浏览次数:27  
标签:provided 依赖 system Maven 编译 JDBC scope

scope是限制Dependency的作用范围的, 影响maven项目在各个生命周期时导入的package的状态。

自2.0.9版本发布后,新增了一种:import,现在已经有了6种scope。

下面分别来说明:

compile:不声明scope元素的情况下的默认值。compile表示被依赖包需要参与当前项目的编译,包括后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。

provided:这个scope假定对应的依赖会由运行这个应用的JDK或者容器来提供。最好的例子就是servletAPI。和数据库连接jdbc,该依赖理论上可以参与编译,测试,运行等周期,但是不会被打包到最终的artifact中。

    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>
    例如:
       <!-- 因为在代码编译期可能需要使用JDBC API(例如:重写数据源连接方式),所以作用域设置为provided ,
           而在运行的时候才需要JDBC的驱动才可以。所以下面的数据库连接作用域一般都设置为runtime-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
                <scope>provided</scope>
            </dependency>
            <!-- 数据库连接驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>

runtime:这种作用域的依赖只会在测试和运行期可用,不需要参与项目的编译。这些依赖将会被打包到最终的artifact中。与compile相比,跳过了编译而已。典型的例子是:JDBC驱动,适用运行和测试阶段。比如你有一个基于web的应用需要在运行时才访问MySQL数据库。你的代码仅仅是基于JDBC API来编写,也就是说只在编译期需要JDBC API JAR,而在运行的时候才需要JDBC的驱动实现。

test:只参与测试工作过程中的测试和执行,典型的例子就是:JUnit,但是这些依赖不会被打包到最终的artifact中。

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

system:和provided scope很像。唯一的区别在于,在system scope中,你需要告诉Mave如何去找到这个依赖(方法是通过systemPath属性来指定依赖的路径),如果你要引用的依赖在Maven仓库中不存在时,就可以用这个scope。不推荐使用system依赖。

    <dependency>
      <groupId>javax.sql</groupId>
      <artifactId>jdbc-stdext</artifactId>
      <version>2.0</version>
      <scope>system</scope>
      <systemPath>${java.home}/lib/rt.jar</systemPath>
    </dependency>

import:从其它的pom文件中导入依赖设置,它只在在dependencyManagement元素下使用,表示从其他pom中导入dependency的配置。

标签:provided,依赖,system,Maven,编译,JDBC,scope
From: https://www.cnblogs.com/sxhxh/p/17477163.html

相关文章

  • ORACLE如何找出视图依赖的对象和视图嵌套层数
    之前写过一篇文章“SQLServer如何找出视图依赖的对象和视图嵌套层数”,这里我介绍一下Oracle数据库中如何找出视图的依赖对象以及视图嵌套层数关系。主要通过DBA_DEPENDENCIES这个系统视图(这个系统视图中包含有对象的依赖关系数据)。另外,我们使用了Oracle的树形查询(层级查询)来展示......
  • 依赖注入(DI)
    Spring常见的DI(依赖注入)方式构造器注入:利用构造方法的参数注入依赖Setter注入:使用Setter方法注入依赖字段注入:在字段上使用@Autowired/@Resource注解@Autowired和@Resource对比@Autowired@ResourceSpring定义的注解JSP-250定义的注解默认按类型自......
  • 登录案例,scoped,ref属性,props其他,混入mixin,插件,饿了么UI
    0解析一下vue项目#1为什么浏览器中访问某个地址,会显示某个页面组件 -根组件:App.vue必须是<template><divid="app"><router-view></router-view></div> </template> -1配置路由 router----》index.j......
  • [转]Maven dependencyManagement与dependencies区别
    一、dependencyManagement应用场景为了项目的正确运行,必须让所有的子模块使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。在我们项目顶层的pom文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子......
  • 揭秘Spring依赖注入和SpEL表达式
    摘要:在本文中,我们深入探讨了Spring框架中的属性注入技术,包括setter注入、构造器注入、注解式属性注入,以及使用SpEL表达式进行属性注入。本文分享自华为云社区《Spring高手之路3——揭秘Spring依赖注入和SpEL表达式》,作者:砖业洋__。在本文中,我们深入探讨了Spring框架中的属性注......
  • 算法题总结-分组背包与依赖背包
    原题https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4?tpId=37&tqId=21239&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fdifficulty%3D1%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&am......
  • Java开发——Maven
    MVC模式MVC模式是软件工程中常见的一种软件架构模式,该模式把项目分为三个基本部分:模型Model、视图View和控制器Controller。视图:界面的显示,以及与用户的交互功能控制器:用来决定对于视图发来的请求需要那一个模型来处理,以及处理后需要跳回到哪一个视图,用来连接视图和模型模型:持......
  • Maven常用命令及其作用
    一、Maven常用命令及其作用1、mavenclean:对项目进行清理,删除target目录下编译的内容2、mavencompile:编译项目源代码3、maventest:对项目进行运行测试4、mavenpacket:打包文件并存放到项目的target目录下,打包好的文件通常都是编译后的class文件5、maveninstall:在本地......
  • axis2 maven报错Could not find artifact org.apache.axis2:axis2:jar:1.7.9
    Couldnotfindartifactorg.apache.axis2:axis2:jar:1.8.2inaliyunmaven(https://maven.aliyun.com/repository/public/)一开始以为是镜像的问题,但是换成中央仓库也没用https://repo.maven.apache.org/maven2/org/apache/axis2/axis2/1.7.9/实际上,这个目录里确实没有j......
  • Android Studio 2022.2.1 设置gradle依赖库
    AndroidStudio安装好后,随便创建一个项目编译时提示错误Plugin[id:'com.gradle.enterprise',version:'3.12.3',artifact:'com.gradle:gradle-enterprise-gradle-plugin:3.12.3']wasnotfoundinanyofthefollowingsources:网上查询显示的是gradle依赖库的问题,解决方......