Maven介绍
maven是什么:工具和软件
maven为什么服务:Java
主要功能:构建管理 依赖管理
GAVP
主版本号(模块变).次版本号(功能变).修订号(修复bug)
依赖传递与依赖冲突
依赖传递:导入依赖会自动导入依赖的依赖(Compile Dependencies依赖的依赖)
简化依赖导入、确保版本无冲突
依赖冲突:当发生重复依赖导入,会终止依赖传递,避免循环依赖和重复依赖的问题
依赖冲突的解决原则:
第一原则:谁短谁优先(引用路径长度)
A-->C-->B1.0
F-->B2.0 结果:A C F B2.0
第二原则:谁上谁优先
A-->B1.0
F-->B2.0 结果:A B1.0
若:
A1.1-->B1.2-->C1.1
F2.2-->B2.2
Pom声明:
F2.2
A1.1
B2.2
最终结果:没有C1.1,只要发生冲突了,后续所有的依赖传递全部终止
依赖传递
依赖排除
<dependency>
<groupId>com.example</groupId>
<artifactId>maven-projectB</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile<scope>
依赖排除
<exclusions>
<exclusion>
<groupId>junit<groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<scope>控制作用范围
compile默认 主程序 测试程序 打包运行 例:log4j
test 测试程序 junit
provided 主程序 测试程序 servlet-api
runtime 测试程序 打包运行 jdbc
maven下载失败:访问本地仓库没有,不访问阿里镜像的问题,本地仓库被污染
gav-->磁盘依赖位置-->删除lastUpdated文件
maven命令在项目根路径运行
Maven的生命周期
Maven有3套相互独立的生命周期,同一个生命周期中按序执行
clean:清理工作
default:核心工作,如:编译 测试 打包 安装 部署
site:生成报告,发布站点
分模式开发
继承:
继承关系:
继承描述的是两个工程之间的关系,与Java继承类似,子工程可以继承父工程的配置信息,常见于依赖关系的继承
实现:<parent></parent>
继承关系的实现:
1.创建maven模块,该工程为父工程,设置打包方式为pom(默认是jar),继承spring-boot-starter-parent
<packaging>pom</packaging>
maven常见打包方式:
jar:普通模块打包,其他模块可引用,springboot项目基本都是jar包,内嵌tomcat,jar指令就能运行
war:普通web程序打包(原始的springmvc程序打包方式),需要部署在外部的tomcat服务器才能执行
pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理
2.在子工程pom文件中,配置继承关系
3.在父工程中配置各个工程共有的依赖
<parent>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>tlias-parent</artifactId>
<relativePath>../tlias-parent/pom.xml</relativePath>
</parent>
若父子工程配置了同一个不同版本的依赖,以子工程为准
<relativePath/> 不配置从仓库中加载
版本锁定:
可以在父工程中通过<dependencyManagement>统一管理依赖版本,子工程引入依赖时不用声明版本
<dependencyManagement>
<dep...
<dep...>
<groupId>
<artifactId>
<version>${lombok.version}</version>
</dep...>
</dependencyManagement>
自定义属性,集中维护版本
<properties>
<lombok.version>1.28.24<lombok.version>
</properties>
<dependencyManagement>和<dependencies>的区别:
<dependencies>直接依赖,在父工程中配置了依赖,子工程会直接继承下来
<dependencyManagement>是统一管理依赖版本,不会直接依赖,还需要在子工程引入所需依赖
聚合:
将多个模块组织成一个整体,同时对项目进行构建
聚合工程:一个不具有业务功能的空工程(有且仅有一个pom文件)(就是父工程)
在聚合工程中通过<modules>设置当前聚合工程所包含的子模块名称:
<modules>
<module>路径</module>
</modules>
<modules>
<module>../tlias-pojo</module>
<module>../tlias-utils</module>
<module>../tlias-web-management</module>
</modules>

私服
私服是一种特殊的远程仓库,架设在局域网内部的仓库服务,用来代理位于外部的中央仓库,用于解决内部的资源共享和资源同步问题。
依赖查找顺序:
本地仓库-私服-中央仓库
资源上传与下载:
安装(install)-发布(deploy)
release:稳定版
snapshot:快照版