一基本概念
1、中央仓库:该仓库存储了互联网上的jar,由Maven团队来维护,地址是:http://repo1.maven.org/maven2/
<dependency> 使用
这个标签揭示了jar 的查找坐标:groupId、artifactId、version
version分为:开发版本(Snapshot)和发布版本(Release)用来保存稳定的发行版本
Maven:使用Snapshot版本,在开发过程中B发布的版本标志为Snapshot版本,A进行依赖的时候选择Snapshot版本,那么每次B发布的话,会在私服仓库中,形成带有时间戳的Snapshot版本,而A构建的时候会自动下载B最新时间戳的Snapshot版本!
2、依赖传递(transitive)、Maven的最近依赖策略
依赖传递:如果A依赖B,B依赖C,那么引入A,意味着B和C都会被引入
Maven的最近依赖策略:如果一个项目依赖相同的groupId、artifactId的多个版本,那么在依赖树(mvn dependency:tree)中离项目最近的那个版本将会被使用。(从这里可以看出Maven是不是有点小问题呢?能不能选择高版本的进行依赖么?据了解,Gradle就是version+策略)
使用<dependencyManagement> [这种主要用于子模块的版本一致性中]
使用<exclusions>[在实际中我们可以在IDEA中直接利用插件帮助我们生成]
使用<dependency>
查看依赖:
1) mvn dependency:tree 命令会列出依赖关系树及各级依赖关系
2) mvn dependency:analyze 分析依赖关系
引入依赖的最佳实践,提前发现问题
mvn dependency:tree命令形成依赖树。看看我们新加入的依赖,是否存在传递依赖,传递依赖中是否和依赖树中的版本存在冲突,如果存在多个版本冲突,利用上文的方式进行解决!
maven 规范化目录结构
3、maven生命周期
clean:有问题,多清理!
package:打成Jar or War包,会自动进行clean+compile
install:将本地工程Jar上传到本地仓库
deploy:上传到私服
maven 生命周期:存在编译、测试、运行
compile:默认的scope,运行期有效,需要打入包中。
provided:编译期有效,运行期不需要提供,不会打入包中。
runtime:编译不需要,在运行期有效,需要导入包中。(接口与实现分离)
test:测试需要,不会打入包中。
system:非本地仓库引入、存在系统的某个路径下的jar。(一般不使用)
https://www.cnblogs.com/hafiz/p/8119964.html