2022-9-16 Maven 学习笔记
一、Maven简介
1、Maven是什么
Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。
Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。
POM (Project ObjectModel) :项目对象模型。
2、Maven的作用
项目构建:提供标准的、跨平台的自动化项目构建方式。
依赖管理:方便快捷的管理项目依赖的资源(jar包) , 避免资源间的版本冲突问题。不用自己手动去下载jar ,pom文件会自动管理下载好的jar包。
统一开发结构:提供标准的、统一的项目结构。
用来解决导入java类依赖的jar,编译java项目主要问题。
3、Maven仓库
仓库分为:
中央(central)
远程(remote)
本地(local)
中央仓库是中心节点,有Maven社区提供,但是各国或各公司网络访问中心仓库速度可能很慢,所以可以自己搭建远程仓库,相当于中央仓库的一个缓存点,加快网络访问速度,还有一个问题,每次都下载jar是非常浪费带宽和时间的,所以在开发者本机也有一个本地仓库,用来缓存jar。
仓库本质就是一个文件夹,用来存放依赖jar等文件。
本地仓库目录默认存放在用户目录下.m2文件下
.m2/respository/ 为仓库存放目录
.m2/settings.xml 为Maven的设置文件
- 本地仓库路径修改需要修改setting.xml:
<localRepository>C:/MyLocalRepository</localRepository>
- 远程仓库修改需要修改项目中的pom.xml文件
<repositories>
<repository>
<id>companyname.lib1</id>
<url>http://download.companyname.org/maven2/lib1</url>
</repository>
<repository>
<id>companyname.lib2</id>
<url>http://download.companyname.org/maven2/lib2</url>
</repository>
</repositories>
中央仓库地址:https://mvnrepository.com/
可以web打开搜索依赖。
Maven依赖的搜索顺序:
- 本地仓库搜索,搜索到即使用,搜索不到就去中央仓库搜索
- 中央仓库搜索到则下载缓存到本地仓库,搜索不到则查找配置的远程仓库
- 如果没配置远程仓库,则报错,配置了远程仓库,则去远程仓库查找
- 远程仓库搜索到则下载到本地缓存,搜索不到则报错
4、POM 坐标
<project>
<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>project</artifactId>
<!-- 版本号 -->
<version>1.0</version>
</project>
5、Maven生命周期
验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的
编译 compile 执行编译 源代码编译在此阶段完成
测试 Test 测试 使用适当的单元测试框架(例如JUnit)运行测试。
包装 package 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
检查 verify 检查 对集成测试的结果进行检查,以保证质量达标
安装 install 安装 安装打包的项目到本地仓库,以供其他项目使用
部署 deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程
Maven 有以下三个标准的生命周期:
clean:项目清理的处理
default(或build) :项目部署的处理
site:项目站点文档创建的处理
Clean 生命周期
当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下阶段:
pre-clean:执行一些需要在clean之前完成的工作
clean:移除所有上一次构建生成的文件
post-clean:执行一些需要在clean之后立刻完成的工作
Default (Build) 生命周期
这是 Maven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段:
validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
initialize(初始化) 初始化构建状态,比如设置属性值。
generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
compile(编译) 编译项目的源代码。
process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
generate-test-resources(生成测试资源文件) 为测试创建资源文件。
process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
test-compile(编译测试源码) 编译测试源代码到测试目标目录.
process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。
Site 生命周期
Maven Site 插件一般用来创建新的报告文档、部署站点等。
-
pre-site:执行一些需要在生成站点文档之前完成的工作
-
site:生成项目的站点文档
-
post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
-
site-deploy:将生成的站点文档部署到特定的服务器上
Maven的所有生命周期都是由插件完成的,你也可以自定义自己的插件,用来实现特定的功能。
常用的命令
# 清理
mvn clean
# 编译
>mvn compile
# 安装
mvn install
# 先清理再部署
mvn clean deploy
# 生成站点文档
mvn site
1、Maven:项目构建工具,主流 整个项目架构,source,resource,test,testresource 依赖:导入的jar包。 对项目进行打包。
apache基金会
2、作为一个java程序员,有必要连接一下apache的官网命名规则。 项目.apache.org。
配置环境变量: 和JAVA,JDK基本一样。
新建MAVEN_H0ME:maven的安装路径
编辑PATH:新建一个%MAVEN_HOME%\bin 通过CMD:mvn -v测试配置是否成功
这个环境变量,说实话,用处不是很大,不配也没什么大问题!
3、Maven解压后: conf目录,配置目录,在这个目录下有一个settings.xml,Maven的核心配置文件。
maven会自动给我们下载jar包! 在我们的JavaWEB阶段,所有的jar包都是我们下载好复制粘贴到我们的项目里。我们在使用框架开发的过程中,会导入非常多的jar包,jar包要统一管理,“版本”,这些jar包是怎么下载的,从哪下载的?
4、Mysql驱动从哪里下载?
我给你们的所有的jar包,同时我通过maven下载下来的! 最终我们的项目是要打包放到服务器上的! 这些jar包也得跟着一起放上去。 加入说我们的项目需要100个jar包,都复制粘贴到项目里。1M,100M。
我们现在要做的是把这些jar包放在本地,不往项目里导,通过某种方式连接到这些jar包。
通过一个配置文件,找到这些jar包,最终我们往服务器上部署项目的时候,只需要部署我们的源码,和这个配置文件。
5、这些jar包我要让他们保存在哪? 仓库是干什么的?存东西的!
<localRepository>E:/repository</localRepository> 我们通过maven下载的依赖都放在这个位置。需要手动创建这个目录。不要用中文
maven可以联网下载依赖,去哪个网下载? 默认情况下是去maven的中央仓库!在美丽国! 除非你的电脑做了特殊配置,否则基本上下不下来。 可以做一个镜像,阿里云maven镜像仓库,需要配置阿里云镜像仓库
实际上,各大编程工具已经内置了maven,当我们第一次创建maven工程时,会联网自动下载一些Maven本身需要的依赖。
5、src main---源码 java---源码.java resources---资源文件 test---测试源码 java---测试源码.java resources---测试资源文件 pom.xml就是我们上面说的那个配置文件,来管理依赖的。
6、maven生命周期
target目录:存放编译后的java文件 默认(default)真正进行项目编译打包等工作阶段
1、validate:验证项目是否正确
2、compile:编译,编译项目的源代码*
3、test:测试,junit这些测试不应该要求代码被打包或部署
4、package:进行打包。* java工程-------.jar javaweb工程----.war
5、verify:验证,对集成测试结果执行检查
6、install:安装* 所有的项目都可以编程jar包(依赖)
7、deploy:部署,将最终的包赋值到远程存储库,和其他开发人 员共享(maven私服) 清理(clean)执行必要的清理工作。删除target文件夹 站点(site)生成项目报告,站点,发布站点(基本不用)
7、Maven坐标:
GroupId:团体组织标识符,它一般情况下以创建这个组织的名称的逆向域名开头。 ArtifactId:项目名。单独项目的唯一标识符。
Version:版本 通过这三个向量来定位Maven仓库中其jar包所在的位置,把对应的jar包引入到工程中。
8、依赖范围: compile:默认。
编译范围,编译,测试,运行都有效。参与打包,安装。
test:测试范围,只有在test范围下才能用,不参与打包,安装。
provided:编译和测试,不参与打包,安装。
runtime:运行,只参与运行。 system:废弃。系统。
import:废弃。引入。
9、依赖的传递:(常识性问题) 假如demo01中引入了mysql,servlet,fastjson,codec依赖,我把demo01install到了我的本地仓库,或者是maven私服,如果其他成员通过GAV引入了我的demo01,demo01中的mysql,servlet,fastjson,codec会不会一起引入进来??? 会!!!!!
10、Gradle:安卓领域,据说未来会取代maven Ant:淘汰
本文作者:(≧∇≦)(≧∇≦)(≧∇≦)
本文链接:https://www.cnblogs.com/gycddd/p/16710445.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南