What is Maven
Maven 是一个构建工具,处理了你的 .java 文件编译成 .class 再打包成 .jar文件,管理了你的(classPath)[https://en.wikipedia.org/wiki/Classpath_(Java)]和其他与构建相关的任务。Maven 它完全独立通过合并其他常见任务如(下载和安装必要的库),您可以不需要其他的任何工具和脚本。
Maven 设计理念围绕"构建可移植性",这样一来,您不会遇到在同一台计算机上使用相同的构建脚本具有相同代码的问题,而在另一台计算机上却没有。
Maven 的三个优点:
- Maven 会下载你使用的库,并且自动下载这些库的依赖,这样处理使得很多苦变得容易。并且让你避免了依赖地狱
- 它使用约定优于配置,因此默认情况下你不需要定义你想要做的任务
- Maven还具有许多不错的插件,您可以安装这些插件来处理许多例行任务,从使用JAXB从XSD架构生成Java类到使用Cobertura测量测试覆盖率。只需将它们添加到pom.xml中,它们就会与您想要执行的所有其他操作集成。
Maven依赖处理原则
Maven 依赖处理机制原则:最短路径原则和优先声明原则。
最短路径原则
假设有2个依赖:
A -> B -> C(2.0)
N -> C(1.0)
这时候出现2个冲突的依赖C(1.0)和C(2.0),这时maven会采用最短路径原则,选择C(1.0)
优先声明原则
A -> B -> C(2.0)
N -> M -> C(1.0)
路径深度相同,那么选用的依赖C的版本取决于最先声明的那个包。
如何处理Maven包冲突
常见的exclude字段排除或者主动锁版本
// A的声明 > N
A -> B -> C(2.0)
N -> M -> C(1.0)
假设你想要使用C(1.0),你可以手动指定exclude
字段把C(2.0)排除出去。
也可以直接声明一个C的depedency,version锁定在1.0。
Maven字段
reference:
stackoverflow what is maven , maven的依赖原则