zoukankan      html  css  js  c++  java
  • Maven学习笔记2(坐标和依赖)

    1、坐标

       Maven坐标为各个构件建立了秩序,任何一个构件都必须明确自己的坐标,一个maven坐标是由一些元素确定的

    <groupId>com.alivn.account</groupId>
        <artifactId>account-email</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>

    groupId:定义为maven项目隶属的实际项目,可以相当于为一个项目的顶级。 比如 支付系统

    artifactId:maven项目的一个子项目    比如 支付系统下的dao模块

    version:当前项目的版本号

    packaging:定义该maven项目的打包方式   默认jar 

    classifier:帮助构建输出一些附属属性,比如account-email.1.0.jar, 借助插件生成account-email.1.0-doc.jar(apiw文档)

    2、依赖

    每个project根元素下,可以包含节点<dependencies>节点。里面包含了若干依赖

    <dependency>
               <groupId>junit</groupId>
               <artifactId>junit</artifactId>
               <version>4.7</version>
               <scope>test</scope>
               <type>jar</type>
               <optional>true</optional>
               <exclusions>
                   <exclusion>
                       <groupId>${dependencygroupId}</groupId>
                       <artifactId>${dependencyartifactId}</artifactId>
                   </exclusion>
               </exclusions>
           </dependency>

    groupId、artifactId、version是一个引入一个依赖必不可少的元素。

    scope:依赖的作用范围   test表示 只在test的代码里面的生效

    type:依赖的类型  对应packaging

    optional:依赖是否可选。

    exclusions:排除依赖,当第二依赖里面依赖了一个不稳定的快照版本的jar时候,存在潜在危险,所以我们应该排除第二依赖里面的那个不稳定版本的依赖,在pom中引用为直接依赖。

    3、依赖范围

    maven在编译  测试 和运行时会使用三个不同的classpath,会根据以依赖范围处理不同的内容,比如主编译时,不会加入scope为test范围的代码,因为它的依赖范围是test

    有以下几种依赖范围

    compile:编译依赖范围  默认值   对编译  测试  运行 三种 classpath都有效

    test:测试依赖范围  只对测试classpath有效

    provided:以提供以来范围,仅对编译和测试有效,运行无效,比如servlet-*jar,运行时  框架有tomcat提供jar

    runtime:对测试和运行有效  但编译无效    如JDBC驱动,只在运行的时候决定使用哪个数据库的驱动

    system:系统依赖范围,和provided范围一致,但必须通过systemPath显示指定依赖文件

    <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.9</version>
                <scope>system</scope>
                <systemPath>${home}/lib/mysql.rt</systemPath>
            </dependency>

    4、传递性依赖

    A->B ,B->C=》A->C

    如果A依赖于B  B依赖于C 那么A依赖于C    B为A 的第一直接依赖  C为B 的第二直接依赖。

    根据scope的依赖范围不同  可以将C于A 的依赖范围 也会有变化 ,具体变化为以下表格    蓝色字体为第一直接依赖   红色字体为第二直接依赖

    依赖范围 compile test provided runtime
    compile compile —— —— runtime
    test test —— —— test
    provided provided —— provided provided
    runtime runtime —— —— runtime

     

    5、依赖调解

    maven传递依赖为我们带来了很多的方便,但是如果 A->B->C(2.0)      A->D->C(1.0) 这个时候会解析 哪个版本的C

    maven有两条规则:(当第一条规则 不生效时 使用第二条规则)

    1、路径最近者优先     实例中 都是两步  距离是相同的   如果不同则去最近者

    2、第一声明者优先    程序中  看B 和C 哪个jar里面的类先被使用,然后解析先被使用的jar的那条线路上的c

    6、查看依赖的命令

    mvn dependency:list(显示所有已解析的依赖)

    mvn dependency:tree(显示依赖树)

    mvn dependency:analyze(分析当前项目的依赖)

  • 相关阅读:
    Android 自定义View修炼-Android 实现自定义的卫星式菜单(弧形菜单)View
    Android中SurfaceView的使用详解
    Android 自定义View修炼-【2014年最后的分享啦】Android实现自定义刮刮卡效果View
    Android 自定义View修炼-实现自定义圆形、圆角和椭圆ImageView(使用Xfermode图形渲染方法)
    Android 自定义View修炼-Android实现圆形、圆角和椭圆自定义图片View(使用BitmapShader图形渲染方法)
    框架 Spring Boot 技术入门到整合 8-1 Springboot整合Mybatis-使用generatorConfig生成mapper以及pojo
    框架 Spring Boot 技术入门到整合 7-3 Springboot配置全局的异常捕获 -同时兼容web和ajax
    框架 Spring Boot 技术入门到整合 7-2 Springboot配置全局的异常捕获 -ajax形式
    框架 Spring Boot 技术入门到整合 7-1 Springboot配置全局的异常捕获 -web页面跳转
    框架 Spring Boot 技术入门到整合 6-3 thymeleaf 常用标签的使用方法
  • 原文地址:https://www.cnblogs.com/ljp-sun/p/6775101.html
Copyright © 2011-2022 走看看