zoukankan      html  css  js  c++  java
  • Maven--依赖范围

    Maven 在编译项目主代码的时候需要使用一套 classpath。在编译和执行测试的时候会使用另外一套 classpath。实际运行的时候,又会使用一套 classpath。

    依赖范围就是用来控制依赖与这三种 classpath(编译 classpath、测试 classpath、运行 classpath)的关系,Maven 有以下几种依赖范围:

    • compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的 Maven 依赖。对于编译、测试、运行三种 classpath 都有效。典型的例子是 spring-core,在编译、测试和运行的时候都需要使用该依赖。
    • test:测试依赖范围。使用此依赖范围的 Maven 依赖,只对于测试 classpath 有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子是 JUnit,它只有在编译测试代码及运行测试的时候才需要。
    • provided:已提供依赖范围。使用此依赖范围的 Maven 依赖,对于编译和测试 classapth 有效,但在运行时无效。典型的例子是 servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要 Maven 重复地引入一遍。
    • runtime:运行时依赖范围。使用此依赖范围的 Maven 依赖,对于测试和运行 classpath 有效,但在编译主代码时无效。典型的例子是 JDBC 驱动实现,项目主代码的编译只需要 JDK 提供的 JDBC 接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体 JDBC 驱动。
    • system:系统依赖范围。该依赖与三种 classpath 的关系,和provided 依赖范围完全一致。但是,使用 system 范围的依赖时必须通过 systemPath 元素显式地指定依赖文件的路径。由于此类依赖不是通过 Maven 仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。systemPath 元素可以引用环境变量,如:
    1 <dependency>
    2   <groupId>jdbc</groupId>
    3   <artifactId>jdbc-stdext</artifactId>
    4   <version>2.0</version>
    5   <scope>system</scope>
    6   <systemPath>${java.home}/lib/rt.jar</systemPath>
    7 </dependency>
    • import:导入依赖范围。该依赖范围不会对三种 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 仓库之外的类库文件
  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/microcat/p/7228494.html
Copyright © 2011-2022 走看看