• 【Maven】Maven之scope依赖范围


    一、理解Maven scope依赖范围的作用

    Maven在编译项目主代码的时候需要使用一套classspath。总共有三种classpath,分别对应于Maven编译项目主代码的时候、Maven编译和执行测试的时候、实际运行Maven项目的时候。

    • Compile: 编泽依赖范围.如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。比如spring-core依赖,在编辑、测试、运行的时候都需要使用该依赖。
    • test: 测试依赖范围。使用此依赖范围的Maven依赖,只对测试的classpath有效,在编译主代码或者运行项目时无法使用此类依赖。比如JUnit的依赖,它只有在编译测试代码及运行测试的时候需要
    • provided:以提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试的classpath有效,但在运行时无效。比如servlet-api,编译和测试项目的时候需要用到该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复的引入一遍。
    • runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。比如JDBC驱动的实现,项目主代码编译的时候,只需要JDK提供的JDBC接口就可以,但是在执行测试或者运行项目的时候才需要实现实现JDBC接口的具体JDBC驱动。
    • import:scope=import,type=pom表示在此pom中引入spring-boot-dependencies的pom的所有内容,注意只能在dependencyManagement中使用。
    • system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。只是,使用system范围依赖时,需要指定systemPath元素显示地指定依赖文件的路径。由于此依赖不是Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可遗址,因此不建议使用。systemPath元素可以引用环境变量,如:

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

    二、依赖范围与classpath的关系

    依赖范围(scope) 对于编译classpath有效 对于测试classpath有效 对于运行时classpath有效 例子
    compile Y Y Y spring-core
    test - Y - JUnit
    provided Y Y - servlet-api
    runtime - Y Y JDBC驱动实现
    system Y Y - 本地的,Maven仓库之外的类库文件
  • 相关阅读:
    SQLalchemy 查询总结
    da,da_driver
    sqlalchemy foreign key查询和backref
    ERROR 1045 (28000)
    bridge 上网
    sqlacodegen
    sqlalchemy
    (转)TComboBox patch for Delphi 7
    delphi xe7 FireDAC 官方文档
    Delphi Variant oleVariant
  • 原文地址:https://www.cnblogs.com/756623607-zhang/p/11373916.html
Copyright © 2020-2023  润新知