Maven:项目管理工具,用于管理和构建各种项目;
主要功能:
1.提供了一套标准化的项目结构
eclipse、MyEclipse、IDEA不同的IDE之间,项目结构不同,因此不能实现项目的通用。
Maven提供一套标准化的项目结构,所有的IDE用Maven构建的项目结构完全相同,实现通用
2.提供了一套标准化的构建流程:编译、测试、打包、发布...
Maven提供了一套简单的命令来完成项目的构建
3.提供了一套依赖管理机制
依赖管理:管理项目所依赖的第三方资源(jar包、插件...)
之前:下载jar包,复制jar包到项目中,将jar包加载到工作环境中
maven项目中:使用标准的坐标配置来管理各种依赖;仅需要简单的配置完成依赖管理
maven项目结构:
maven-project:项目名称
pom.xml:项目对象模型,maven工程的基本工作单元,包含了项目的基本信息,用于描述项
目如何构建,声明项目依赖。
src:代码文件目录;存在main、test文件
main:源文件目录
java:源代码Java文件目录
resources:源代码配置文件目录
webapp:web项目核心目录
WEB-INF:web应用文件目录,web项目信息,如:web.xml、本地图片、jsp视图
test:测试文件目录
java:源代码Java文件目录
resources:源代码配置文件目录
target:打包输出目录
classes:编译输出目录,字节码文件
test-classes:测试编译输出目录,字节码件
Maven仓库:
本地仓库:自己计算机目录
中央仓库:由Maven团队维护的全球唯一的仓库,维护了全球开源免费的jar包
远程仓库(私服):由公司团队搭建的仓库,维护了自己写的jar包
Maven依赖搜索:
项目需要A.jar包,
尚未配置远程仓库时,
1.在本地仓库中搜索,如果在本地仓库中找到A.jar包,则直接引用;如果找不到,执行步骤2
2.maven去中央仓库找A.jar包,如果找到,则maven自动下载jar包到本地仓库中,项目完成引用;如果找不到,maven抛出错误:无法找到依赖文件。
已经配置远程仓库,
1.项目自动去本地仓库搜索A.jar包,如果找到,项目直接引用;如果本地仓库没有,则步骤2
2.项目去远程仓库中搜索A.jar包,如果找到,则下载到本地仓库,完成引用;如果没有,则
3.项目去中央仓库中查找,找到后,先下载对应的jar包到远程仓库中;然后远程仓库将jar包传递给本地仓库,项目完成引用
4.如果找不到,maven抛出错误:无法找到依赖文件
注意:一般情况下,远程仓库会将中央仓库中的jar包全部导入,再加上自己写的jar包或者有版权信息的jar包,提升访问速度。
maven的常用命令:
compile:编译;clean:清理;test:测试;package:打包;install:安装
maven构建生命周期:描述的是一次构建过程经历经历了多少个事件,一个项目构建和发布的过程
一个maven构建的生命周期有以下几个阶段:
validate:验证,验证项目是否正确且所有必须信息是可用的
compile:编译,执行编译,源代码编译在此阶段
test:测试,使用适当的单元测试框架(JUnit)运行测试
package:打包,创建jar/war包(在pom.xml中定义)
verify:检查,对集成测试的结果进行检查,以保证质量达标
install:安装,安装打包的项目到本地仓库中,以供其他项目使用
deploy:部署,拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程
Maven有三个标准的生命周期:
clean:项目清理 pre-clean -> clean -> post-clean
default:核心工作,项目部署的处理 compile -> test -> package -> install...
site:产生报告、发布站点等 pre-site -> site -> post-site
同一个生命周期内,执行后边的命令,前边所有的命令会自动执行。
Maven依赖管理:
maven坐标:资源的唯一标识,使用坐标来定义项目或引入项目中需要的依赖
groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.alibaba)
artifactId:定义当前maven项目名称(通常是模块名称)
version:定义当前项目号
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
依赖范围:通过设置maven坐标的依赖范围scope,来设置对应jar包的作用范围
compile:编译环境、测试环境、运行环境
test:测试环境
provided:编译环境、测试环境
runtime:测试环境、运行环境
system:编译环境、测试环境
<scope>默认值都是compile