• maven依赖的描述


    maven的坐标和依赖
      坐标和依赖,主要涉及的就是pom文件的头部和<dependencies>标签部分
    (1)pom文件的头部
      这里头部不是指pom文件的开头<project>标签的属性:

    <project xmlns="http://maven.apache.org/POM/4.0.0"
      xmlns:xsi = http://www.w3.org/2001/XMLSchema-instance
      xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
      http://maven.apache.org/maven-v4_0_0.xsd">

      这里的头部指的是如下部分:

      <groupId>com.hex.web</groupId>
      <artifactId>web-model-</artifactId>
      <version>1.0.0-SNAPSHOT</version>
      <packaging>jar</packaging>

      其中,<groupId>标签表面的是项目名称,一般采用项目的名称作为<groupId>的值;<artifactId>标签是项目底下的一个模块;<version>标签表示的是这个模块的版本,SNAPSHOT译为快照,表示的其实是一个不稳定版本;<packaging>标签表示的是打包的类型,没有这个标签时默认是jar。这个头部表示的即是一个maven项目的坐标。
    (2)<dependencies>标签
      <dependencies>标签下有多个<dependency>子标签,每一个<dependency>都是这个项目或者模块的依赖,<dependency>标签的子标签如下: 

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>2.5.6</version>
    </dependency>

      每个依赖中都有一个项目的坐标,这个坐标唯一确定了一个项目。有些依赖可能会出现<scope>标签,这个标签表示的是依赖的生效范围,默认全局有效。例如如下标签:

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

      这个依赖表示,junit只会在项目的测试中有效,其他时候是不会引入这个依赖的。 依赖范围分类如下,
      compile:编译依赖范围,这是默认的依赖范围,对编译、测试、运行都有效;
      test:测试依赖范围,只对测试classpath有效;
      provided:已提供依赖范围,只在编译和测试的时候有效,运行时无效;
      runtime:运行时依赖范围,只在测试和运行classpath有效;
      system:系统依赖范围,慎用!
      import:导入依赖范围,不会对三种classpath产生实际影响。

    传递依赖
      假设项目A依赖于项目B1和B2,项目B1依赖于项目C1,项目B2依赖于项目C2,那么可以说项目A传递依赖于C1,项目A传递依赖于C2。
    (1)传递依赖的范围
      例如:如果A在compile范围依赖于B,B在compile范围依赖于C,那么A在compile范围依赖于C
      传递依赖的范围由第一直接依赖(A依赖于B)和第二直接依赖(B依赖于C)共同决定。
    (2)传递依赖的版本问题
      例如:如果A依赖于B1和B2,B1依赖于C1,C1依赖于C(2.0),B2依赖于C(1.0),那么A传递依赖于C,但是C的版本如何确定?
      第一原则:路径最短原则,A传递依赖于C的路径长度分别为3和2,按照原则应该选择路径长度为2的C的版本,所以C的版本为1.0
      第二原则:最先声明原则,如果路径相同,如上诉例子中,B1依赖于C(2.0),此时C的版本应该由pom文件中最先声明的依赖确定。
    (3)排除依赖
      例如:A依赖于B,B依赖于C,则A传递依赖于C。但是,当我们不像在项目A中引入C的依赖(传递也不要),那么我们需要在引入依赖B时,排除B中C的依赖。如下,我们在A的pom文件中应该这样写:

    <dependency>
      <groupId>com.B.project</groupId>
      <artifacted>project-b<//artifactId>
      <version>1.0.0</version>
      <exclusions>
        <exclusion>
          <groupId>com.C.project</groupId>
          <artifactId>project-c</artifactId>
        <exclusion>
      <exclusions>
    </dependency>

      这样,在引入对B的依赖时,就不会引入对C的依赖。如果我们还不想引入B的依赖D,可以在<exclusions>标签下添加一个<exclusion>标签描述D的坐标。注意:此处的坐标不包含<version>标签,因为B中对C的依赖的版本是唯一的(不唯一时会按照两个原则确定唯一的)

  • 相关阅读:
    PC端微信扫码支付和支付宝跳转支付 斧头帮
    微信支付 斧头帮
    PC端实现浏览器点击分享到QQ好友,空间,微信,微博等 斧头帮
    图片,word,Excel等附件上传 斧头帮
    java定时任务详解 斧头帮
    手机浏览器实现分享给好友或是朋友圈 斧头帮
    Java缓存EhcacheEhcache的Cache在SSM框架中的配置 斧头帮
    通过精确地址获取经纬度 斧头帮
    SpringBoot中设置自定义拦截器 斧头帮
    Visual Studio 2008创建项目(ATL)
  • 原文地址:https://www.cnblogs.com/songxh-scse/p/7171814.html
Copyright © 2020-2023  润新知