maven学习笔记(1)--坐标和依赖

1 坐标和依赖

1.1 maven坐标包括:

** groupId、artifactId、version 、packaging、classifer **

  • groupId:定义当前maven项目所属的实际项目
  • artifactId: 定义实际项目中的一个模块
  • version:版本号
  • packaging : 打包方式 默认是jar
  • classifier:定义构建输出的一些附属构件。
    注意:不能直接定义项目的classifier,因为附属构件项目默认生成的,而是由附加插件帮助生成的。

1.2 maven依赖

1.2.1 maven的配置文件* pom.xml *中 使用


  
  ...
 

来标记依赖

1.2.2 依赖元素标识:

  • groupId、artifactId、version:依赖的基本坐标
  • type:依赖的类型。对应于坐标定义的packaaging。不必声明,默认是jar
  • scope:依赖范围。包括:compile / test / provided / runtime / system / import 默认 compile
  • optional:标记依赖是否可选。true / false 标记当前依赖是否会被传递
  • exclusions: 用来排除传递性依赖

** 依赖范围与classpath的关系 **

依赖范围(scope) 编译有效 测试有效 运行时有效
compile Y Y Y
test -- Y --
compile Y Y --
compile -- Y Y
compile Y Y --

import:导入依赖范围,不会对classpath以上三种有效范围产生实际影响

假设A依赖B,B依赖C 则A对B是第一直接依赖,B对C是第二直接依赖。如下表,最左一列表示第一直接依赖范文,最上面一行表示第二直接依赖范围,中间交叉单元格则表示传递性依赖范围
** 依赖范围影响传递性依赖**

compile test provided runtime
compile compile -- -- runtime
test test -- -- test
provided provided -- provided provided
runtime runtime -- -- runtime
  • maven依赖调解的第一原则:路径最近者优先。
  • maven依赖调解的第二原则: 第一声明者优先。顺序靠前的依赖优先
  • 排除依赖:exclusion 不需要写版本号 因为groupId和artifactId可以定位依赖不需要version
  • 归类依赖:
    有些时候一些依赖的包来自同一个项目的不同模块,他们的版本都是相同的。可以使用如下配置方式:

  2.5.6



  
    org.springframework
    spring-core
    ${springframework.version}
  

  • 可以运行如下命令查看当前项目的已解析依赖
    mvn dependency:list
  • 运行如下命令查看当前项目的依赖树:
    mvn dependency:tree
  • 运行如下命令可以帮助分析当前项目的依赖:
    mvn dependency:analyze
    • 显示结构中Userd undeclared dependencies 指项目中使用到但是没有显示声明的依赖。这种依赖意味着潜
      在的风险。应该显示声明任何项目中直接使用的依赖。
    • Unused declared dependencies 指项目中未使用但是显示声明的依赖。应该仔细分析,不要简单删除处理。

你可能感兴趣的:(maven学习笔记(1)--坐标和依赖)