maven
概念
如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。
以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。
而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。
maven就是用来管理软件项目的,可以对java项目进行全自动构建,管理项目所需的依赖。
maven曾经是jakarta项目的子项目,现在是Apache软件基金会主持的独立Apache项目。
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
优点和缺点
优点
原来的项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下,而借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程只需要“引用”这个文件,并不需要重复复制到工程中。
原来的项目中所需要的jar包都是提前下载好的,而Maven在联网状态下会自动下载所需要的jar包。首先在本地仓库中找,找不到就在网上进行下载。
出色的依赖项管理,包括自动更新、依赖想关闭(也称为传递依赖项)
开箱即用的庞大且不断增长的伊利阿酷,并与最大的开源项目进行了安排,可以实时提供最新版本
原来的项目一个项目就是一个工程,而借助Maven可以将一个项目拆分成多个工程。能够轻松同时处理多个项目
由于没有限制依赖的数量,如果出现循环依赖的时候会出现问题,这个时候有两种方式处理,一种是通过
build-helper-maven-plugin 插件来规避,另一种就是重构两个相互依赖的项目。
几乎不需要额外的配置就可以立即访问新功能
缺点:
1.由于需要下载,导入等,导致加载缓慢,或者出现错误,和不稳定
2.缺少对Maven的文档描述(网上一大堆,但是没有标准)
3.中央存储库中的元数据不佳
4.POM.xml做为项目元数据的来源
maven 官网
https://maven.apache.org/
依赖搜索
https'//mvnrepository.com/
下载地址
https://archive.apache.org/dis/maven/maven-3/3.3.9/binaries/apache-maven3.3.9-bin.zip
安装
注意 JDK的版本建议为1.8
环境配置
MAVEN_HOME
path
新增 %MAVEN_HOME%\bin
测试
打开cmd win+r cmd
输入 mvn-v 输出正确的版本信息
maven 项目结构
maven-demo(maven项目名称)
pom.xml
src
main
java
resources
test
java
resources
POM文件
POM一个项目的基本信息,用于描述项目如何构建,声明项目依赖等。
项目配置 项目版本 依赖管理 插件管理 版本管理 构建管理
project 工程根标签
modelVersion 4.0 模型版本
parent parent标签类似java中的继承,复用依赖,减少冗余配置
dependencies 依赖组
dependency 依赖
groupId 工程组标志
artifactId 工程的标志 工程名
version 工程的版本号
properties 依赖配置
dependencyManagement 依赖管理
build 使用maven构建的项目可以直接使用maven build完成项目的编译、测试、打包,无需额外配置。
plugins具体的编译和打包工作是通过其中的plugin配置来实现的
plugin
两种仓库
本地仓库 本地的maven仓库
中央仓库 这里用到的是淘宝的映射
坐标
坐标是jar包的唯一标识,maven通过坐标在仓库中找到所需要的jar包
dependency 依赖
groupId 工程组标志
artifactId 工程的标志 工程名
version 工程的版本号
依赖范围
complie test provided 默认为complie
complie 对主程序、测试程序有效,可以进行部署和打包 spring-core
test 只对测试程序有效 junit
provided 不参与打包与部署 servlet-api
依赖可以进行传递和排除
传递就是在最下面引用之前的工程
排除 <exclusion>
依赖原则
依赖就是为了解决工程模块之间jar包冲突的问题
路径最短者优先
验证路径同时时,先声明者优先
maven常用命令
清理项目 mvn clean
编译主程序 mvn cmplie
编译测试程序 mvn test-comoplie
执行测试 mvn test
安装项目 mvn install
部署项目 mvn depoy
查看版本 mvn -v
生产站点 mvn site
依赖管理 mvn dependency:tree
maven 生命周期
清理 clean
编译 complie
测试 test
打包 package
安装 install
发布 deploy
执行时是由上到下顺序执行的
比如 执行 package 会依次执行 clean complie test package
maven自动执行构建过程的哥哥环节的原因
maven的插件机制完全依赖maven的生命周期