maven设计理念
- 让代码构建变得简单
- 约定优于配置
maven仓库
maven 三层仓库
中央仓库
存储了大部分开源的依赖和插件,远程仓库名字:central。远程仓库
使用nexus大家的私服,可以用来存放二方库,三方库等。同时远程仓库也可以访问中央仓库,或者三方库。本地仓库
本地电脑存储的依赖包的地方,默认路径是~/.m2/repository
仓库的加载顺序
中央仓库如果不在setting中显示指定的话,会加载默认的central仓库。
maven镜像
maven镜像是为了加快maven包下载设立的中间代理,setting文件中配置了mirror会影响包的加载顺序。
如果配置了mirrorOf为对应远程仓库或者中央仓库的地址镜像,那么要加载对应仓库的时候会先加载对应的maven镜像。
如果配置mirrorOf为*,那么加载远程仓库或者中央仓库的时候,都会默认的去加载配置的镜像仓库。
完整加载顺序
local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central
- setting_profile_repo 全局setting文件的profile设置
- pom_profile_repo pom文件里的profile设置
- pom_repositories pom里面直接配置repository,不带profile进行选择
- settings_mirror 为全局setting文件镜像。
参考文档:Maven 项目中依赖的搜索顺序
maven生命周期
清洁(clean)生命周期
- 清洁(clean) 删除以前构建生成的所有文件,主要为删除之前构建的target目录,并不会影响本地仓库
默认(default)生命周期
- 校验(validate) - 验证项目是否正确,所有必要的信息可用
- 编译(compile) - 编译项目的源代码
- 测试(test) - 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署
- 打包(package) - 采用编译的代码,并以其可分配格式(如JAR)进行打包。
- 验证(verify) - 对集成测试的结果执行任何检查,以确保满足质量标准
- 安装(install) - 将软件包安装到本地仓库中,用作本地其他项目的依赖项
- 部署(deploy) - 在构建环境中完成,将最终的包复制到远程存储库以与其他开发人员和项目共享。
站点(site)生命周期
- 网站(site) 生成项目的站点文档
maven生命周期中的每个命令执行时,都会调用前面的命令。
maven插件
Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标
-
常用打包插件
常用打包插件 - maven 默认的 package 命令构建的 jar 包中只包括了工程自身的 class 文件,并没有包括依赖的 jar 包
- maven-assembly-plugin插件会将当前工程class和所依赖的jar打成一个可执行包。
- maven-shade-plugin插件可以将当前工程class和所依赖的jar包打成一个可执行包。
- maven-assembly-plugin与maven-shade-plugin区别:maven-assembly-plugin中如果有多个不同版本但是其他信息相同的jar包,则只会选择一个jar包打进可执行包,maven-shade-plugin则会将各个版本的jar中的一些信息进行合并,防止各个版本不兼容的情况。
可参考:maven-assembly-plugin和maven-shade-plugin打包区别及弊端
maven常用插件:
常用 Maven 插件介绍(上)
常用 Maven 插件介绍(下)
maven快照机制
快照是一种特殊的版本,maven会定期的去获取最新的快照版本,这个时间可以是几分钟,也可以是几个小时,Maven 每次构建都会在远程仓库中检查新的快照,虽然maven会自动获取最新快照,也可以在构建的时候执行:mvn clean package -U
强制更新