目录
Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。
Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。
POM (Project ObjectModel) :项目对象模型。
项目构建:提供标准的、跨平台的自动化项目构建方式。
依赖管理:方便快捷的管理项目依赖的资源(jar包) , 避免资源间的版本冲突问题。不用自己手动去下载jar ,pom文件会自动管理下载好的jar包。
统一开发结构:提供标准的、统一的项目结构。
用来解决导入java类依赖的jar,编译java项目主要问题。
仓库分为:
中央(central)
远程(remote)
本地(local)
中央仓库是中心节点,有Maven社区提供,但是各国或各公司网络访问中心仓库速度可能很慢,所以可以自己搭建远程仓库,相当于中央仓库的一个缓存点,加快网络访问速度,还有一个问题,每次都下载jar是非常浪费带宽和时间的,所以在开发者本机也有一个本地仓库,用来缓存jar。
仓库本质就是一个文件夹,用来存放依赖jar等文件。
本地仓库目录默认存放在用户目录下.m2文件下
.m2/respository/
为仓库存放目录
.m2/settings.xml
为Maven的设置文件
本地仓库路径修改需要修改setting.xml
:
<localRepository>C:/MyLocalRepositorylocalRepository>
远程仓库修改需要修改项目中的pom.xml
文件
- <repositories>
- <repository>
- <id>companyname.lib1id>
- <url>http://download.companyname.org/maven2/lib1url>
- repository>
- <repository>
- <id>companyname.lib2id>
- <url>http://download.companyname.org/maven2/lib2url>
- repository>
- repositories>
中央仓库地址:https://mvnrepository.com/
可以web打开搜索依赖。
Maven依赖的搜索顺序:
本地仓库搜索,搜索到即使用,搜索不到就去中央仓库搜索
中央仓库搜索到则下载缓存到本地仓库,搜索不到则查找配置的远程仓库
如果没配置远程仓库,则报错,配置了远程仓库,则去远程仓库查找
远程仓库搜索到则下载到本地缓存,搜索不到则报错
- <project>
-
- <modelVersion>4.0.0modelVersion>
-
- <groupId>com.companyname.project-groupgroupId>
-
- <artifactId>projectartifactId>
-
- <version>1.0version>
- project>
验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的
编译 compile 执行编译 源代码编译在此阶段完成
测试 Test 测试 使用适当的单元测试框架(例如JUnit)运行测试。
包装 package 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
检查 verify 检查 对集成测试的结果进行检查,以保证质量达标
安装 install 安装 安装打包的项目到本地仓库,以供其他项目使用
部署 deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程
Maven 有以下三个标准的生命周期:
clean:项目清理的处理
default(或build) :项目部署的处理
site:项目站点文档创建的处理
当我们执行 mvn post-clean
命令时,Maven 调用 clean 生命周期,它包含以下阶段:
pre-clean:执行一些需要在clean之前完成的工作
clean:移除所有上一次构建生成的文件
post-clean:执行一些需要在clean之后立刻完成的工作
这是 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
(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。
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包我要让他们保存在哪? 仓库是干什么的?存东西的!
E:/repository 我们通过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:淘汰