Maven应用相关

Maven应用相关说明

做用

项目管理工具,对项目进行构建依赖管理服务器

Maven POM

POM (Project Object Model) 项目对象模型,Maven工程的基本单元框架

POM指定配置
  • 项目描述
  • 项目依赖
  • 项目插件
  • 项目构建的Profile

Maven构建的生命周期

  • 验证 validate:验证项目的配置是否正确
  • 编辑 complier:编译源代码
  • 测试 test:使用适当的测试框架测试
  • 包装 package:对已编译的文件打包
  • 检查 verify:对集成测试的结果检查,以保证质量达标
  • 安装 install:安装打包的项目到本地仓库,以供其它项目使用
  • 部署 deploy:拷贝最终的工程包到远程仓库中,以共享给其它开发人员使用

Maven仓库

  • 本地仓库 本地机器.m2指向的文件目录
  • 远程仓库 远程服务器的maven服务器,包maven仓库和其它私服

Maven 依赖

scope maven的scope决定依赖的包是否加入本工程的classpath下
依赖范围scope 编译classpath 测试classpath 运行classpath 传递性
complie Y Y Y Y
test - Y - -
provider Y Y - -
runtime - Y Y Y
system Y Y - Y
详解
complie : 默认,强依赖,打包的时候会包含
test : 仅仅参与测试相关的编译、运行
provider : 打包的时候不会包含,使用时须要使用方提供相关设施(或者说是依赖),能够理解为编译后打包的时候excluded出去了
runtime : 无需参与编译,终端项目中与complie的区别:跳过编译,常与optional搭配使用
system:与provider相似,区别在与设施提供方不是maven仓库,而是从本地文件系统中获取。必定要配合systemPath属性使用(能够理解为从外部拷贝依赖到项目中)

optional 与 exclutions

相同点:都是排除jar是依赖
不一样点:
  • optional:该依赖只能在当前项目中使用,不能传递到引用该项目的父项目,如父项目须要使用则须要主动依赖
  • exclutions:主动排除子项目传递的依赖

重复依赖的两大原则

最短路径原则

好比以下两个版本的依赖关系:
V1版本:A -> B -> C -> D
V2版本:A ->M -> N -> G -> D
这个时候出现了两个版本的D,依据最短路径原则,V1版本依赖D的路径长度为3,V2版本依赖D的路径长度为4,因此选择V1版本的D依赖maven

声明优先原则

好比以下两个版本的依赖关系:
V1版本:A -> B -> C
V2版本:A -> D -> C
这个时候两个版本的最短路径是同样长,最短路径原则就会失效,这个时候maven的解决方案是在POM中的优先声明原则,谁先声明就优先使用谁的版本ide

相关文章
相关标签/搜索