• 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仓库以外的类库文件
  • 相关阅读:
    Flink开发_Flink中的函数接口
    Netty简介
    java NIO简单了解
    Kafka发送消息流程
    Kafka高性能的原理
    Hbase表设计
    Hbase的读写过程
    Hbase各组件职责
    什么是java的深浅拷贝?
    Flink问题1
  • 原文地址:https://www.cnblogs.com/zhang-yawei/p/10156752.html
Copyright © 2020-2023  润新知