zoukankan      html  css  js  c++  java
  • maven下的经常使用的几个元素以及依赖范围的一些知识

      maven的pom.xml配置文件里面的project根节点下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个依赖,每个依赖都可以包含的元素:
      groupId,artifactIdversion:依赖的基本坐标,对于任何依赖来说,基本坐标最重要,maven根据坐标才能找到对应的依赖;

      type:依赖的类型,对应项目坐标定义的packaging,大部分情况下无须声明,默认是jar;

      scope:依赖的范围;

      optional:标记依赖是否可选;

      exclusions:用来排除传递性依赖;

      一般情况下,大部分依赖声明只包含基本坐标,一些特殊情况,其他元素的地位也至关重要;

      下面是scope元素的几个参数,都有自己的范围,超出范围将会无效:

      compile:编译依赖范围,若未指定依赖范围,会默认该依赖范围,使用该依赖范围的maven依赖,对于编译测试运行的classpath都有效;比较典型的就是spring-core,在编译、测试和运行项目的时候都需要使用到该依赖;

      test:测试依赖范围,使用该依赖范围的maven依赖,只对测试的classpath有效;典型的就是Junit,它只有在编译测试代码的时候才有效;

      provided:已提供依赖范围,使用该依赖范围的maven依赖,只对编译测试的classpath有效,但在运行时无效;典型的就是servlet-api,编译和测试的时候需要该依赖,但在运行项目的时候,由于容器已经提供了,就不需要maven重复的引入一遍;

      runtime:运行时依赖范围,使用此类范围的maven依赖,对于测试运行的classpath有效,但在编译主代码的时候无效。典型的例子是JDBC驱动的实现,项目住代码只需要JDK提供JDBC的接口,只有在测试或者运行项目的时候才需要实现上述接口的具体实现;

      system:系统依赖范围,使用此类范围的maven依赖,也是对应编译测试的classpath有效,运行时无效,但是使用该范围的依赖,必须显式的通过systemPath指定依赖的路径(因为此类依赖不是通过maven仓库解析的,而往往与本地机绑定,可移植性比较差,谨慎使用),可以引用环境变量,例子如下:

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

      以下是一个简单的表格(Y代表有效,N代表无效);

    依赖范围(scope) 对于编译classpath有效 对于测试classpath有效

    对于运行classpath有效

    典型例子
    compile Y Y Y spring-core
    test N Y N Junit
    provided Y Y N servlet-api
    runtime N Y Y JDBC驱动实现
    system Y Y N 本地的,Maven仓库以外的类库文件
  • 相关阅读:
    移动开发 Native APP、Hybrid APP和Web APP介绍
    urllib与urllib2的学习总结(python2.7.X)
    fiddler及postman讲解
    接口测试基础
    UiAutomator2.0 和1.x 的区别
    adb shell am instrument 命令详解
    GT问题记录
    HDU 2492 Ping pong (树状数组)
    CF 567C Geometric Progression
    CF 545E Paths and Trees
  • 原文地址:https://www.cnblogs.com/zhang-yawei/p/10156752.html
Copyright © 2011-2022 走看看