一、Maven的简介和安装
1、Maven是什么?
2、Maven的四个特点
1、添加第三方依赖(jar包)
以前添加各种jar包采取复制粘贴到项目中的方式,每次创建一个新的项目,如果需要使用第三方的jar包,都要放到项目中,jar包占用了大部分内容,会造成空间中的jar包占据了很大的地方,maven通过第三方仓库来解决jar包重复的问题。将所有的jar包都放在仓库中,项目要使用jar包只需要做依赖
2、解决jar之间的依赖关系
一般使用的第三方jar包,有的jar包在使用过程中对其他jar包又依赖关系。比如c3p0 jar包,在使用的时候必须同时添加,如果忘记添加,项目启动就会出现异常。在maven中,需要导入对应的一个依赖(jar包),该jar包依赖会自动导入。
3、 获取第三方依赖
maven如果在本地仓库中引入的依赖是不存在的,会自动取官方仓库去下载对应的jar包。官方地址:官方地址
4、可以将项目拆分开发
如果在大型项目中通过多人配置来做项目,每个人负责开发一部分,怎么划分项目,如果在一个中小型的公司,可以将项目安装package的方式拆分,如果项目开发人太多,通过package拆分就不合适,maven就可以将一个项目拆分成多个
3、什么是构建?
项目的构建就是将我们开发的项目(Java代码,配置文件,静态资源,jsp)作为“原材料”去生产一个可以运行的项目的过程
开发的项目——>运行的项目
一般的项目构建分为下面几个阶段:
(1)清理:将原来生成的编译结果删除,为重新编译做准备工作
(2)编译:将JAVA源程序编译为字节码文件
(3)测试:针对项目的关键点进行测试,确保项目在迭代开发中关键点正确。
(4)报告:在每次测试后以标准的格式记录和展示测试结果
(5)打包:将一个包含多个文件的项目加工成对应的压缩包,java项目打包成jar,web项目打包成war;
(6)安装:在maven中独有的,将一个项目打包后安装到本地仓库。
(7)部署:将jar包部署到远程仓库或者将war包部署到服务器。
4、自动化构建
上述描述的步骤在各种工具里面都能实现,但是不太标准。
讲一个小的故事:
有一个程序员小明,向往常一样来到公司,打开邮箱查看工作邮件,发现测试小组发了一邮件,告诉小明你昨天开发的代码有bug,小明安装邮件中提升,将项目编译、测试、打包,部署运行查看bug,发现真的有问题,尝试修改bug,修改没有成功,发现午饭时间到了。吃饭,继续工作,当bug处理完毕后,将项目编译、测试、打包,部署运行,查看bug是否真的解决了,发送邮件给测试小组,告诉问题解决了。发现下班时间到了。
小明一天的工作:
根据上面的图。发现小明一天工作大多数浪费在编译、打包、部署、测试上了。有没有一种工具将所有重复的过程都自动化实现。自动化部署就是将这些重复的劳动自动完成。
maven可以帮助我们完成重复的劳动
maven的作用:
5、Maven的安装和配置*
(1)Maven的下载
官网地址:
(2)Maven的安装
在安装前确保java安装是没有问题的:
①解压缩:
解压后的根目录:
bin:可执行文件
boot:引导目录
conf:配置文件 我们如果要修改maven的配置 都在改目录下
lib:jar包
打开conf:
logging:日志 maven的运行日志 如果maven启动出现问题 可 以在日志中查找
setting:maven的配置文件 所有的配置都在该文件中
②配置环境变量
和java配置环境变量一样
创建一个自定义变量:
配置可以看见bin目录的文件路径:
在path下添加下面的配置:
配置后使用cmd查看是否配置成功:
③Maven的配置settings.xml
1、修改本地仓库地址
默认是放在系统盘:
在系统中创建一个文件夹,用来做maven的本地仓库,建议大家叫repository
打开根目录下conf文件夹中的setting.xml文件:
2、修改中央仓库地址,为了加快下载的速度
配置阿里镜像或者华为镜像
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/ central
3、配置jdk的版本号
maven默认使用jdk1.5
将下面的配置添加到配置文件中:
jdk-1.8
true
1.8
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
二、Maven的工程构建*
(一)eclipse配置Maven的插件
搜索maven:添加maven的目录
添加后选择默认maven使用并应用:
配置maven默认的配置文件位置:
(二)Maven工程的构建
1、创建java项目
右键创建一个新其他的项目:
搜索maven,选择maven project
不使用模板创建项目:
填写对应的名称,创建项目:
项目创建后就默认有很多的构建:
在src/main/java 中就可以写代码:
2、创建web项目
创建项目的时候要选择war:
创建项目后,项目报错,告诉你少web.xml 文件:右键项目设置:
去掉勾选,假设该项目不是web项目:
继续勾选该选择:
保存退出:查看当前项目:
创建一个首页:
运行:
访问页面:
Maven的依赖管理
(一)Maven的核心概念
maven能够自动化部署项目,和核心概念是分不开的,我门从核心概念入手来查看maven如何自动化部署的
1、pom
POM(project object model)项目对象模型,在maven中使用管理对象的方法来管理项目,将所有的项目信息都封装到pom.xml文件中。pom文件就是maven的核心。
2、约定的目录结构
约定的目录结构对于maven来说是实现自动化部署不可缺的一步,我们如果想让maven自动化进行对应的步骤,首先要告诉maven我们的Java文件、静态资源在哪个文件下存放,告诉系统存放文件位置有2种方式:配置和约定,maven使用的约定,提前定义好文件存放的位置
3、maven的仓库
(1)本地仓库
maven在当前电脑中存放jar包的或者插件的地方
(2)远程仓库
如果maven本地仓库没有jar包,会去远程仓库去查找:
1、中央仓库:官方创建的仓库,里面包含了几乎所有的jar包
2、中央仓库镜像:各大洲都创建中央仓库镜像;作用:提高用户的访问速度
3、私服:局域网中创建一个长裤,让局域网中所有人都在私服中下载资源,如果私服也没有对应的资源,会去中央仓库下载
4、maven的坐标
在日常生活中的坐标:
使用经纬度 x,y两个向量就可以表示平面的一个点
使用三个向量x,y,z来表示有高度的一个点
mavne中使用三个向量来表示一个jar包的位置:
groupid 组id
artifactid 项目或者组件id
version 版本号
(二)Maven的常用命令
1、在eclipse中创建maven项目
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
在新建的maven项目中导入jar包:
配置完pom文件后,最好是更新一下当前的项目:
在src/main/java 创建一个主类:
在src/test/java下创建一个测试类:
2、maven常见命令:
必须配置maven的环境变量:
必须在pom.xml文件所在的目录下使用maven的命令:
使用命令:
清理 mvn clean
(2)编译命令 mvn compile
将主函数中java资源进行编译:
打开target文件夹:
从结果来看,使用该命令只有src/main下面的java代码被编译了
(3)测试 mvn test
修改代码,重新测试:
运行测试:
在maven运行测试命令的时候 会将src/test/java下面所有的junit测试都运行一遍,确保没有问题。 maven命令中 自动执行前面所有的命令:
(4)打包命令 mvn package
执行打包命令 如果测试不通过,是不会打包的
将代码修改为正确的,重新执行打包:
查看targat文件夹:
(5)安装命令 mvn install 将jar包安装到本地仓库
查看本地仓库:
(三)Maven依赖传递
1、什么是maven的依赖
当一个项目配置了对应的jar包,该jar包就叫做当前项目的依赖
2、以来的传递
先将maven01重新安装到本地仓库
创建一个新的项目maven02,在mavne02中引入maven01的依赖:
查看mavne02项目的依赖jar包:
maven依赖是可以被传递的。
3、依赖的范围scope*
scope属性的作用:
常用的scope属性
compile(默认)
test
provided
(1)当前依赖的使用范围
测试:maven01项目中:
修改scope属性:
查看项目:
complie 和 provided 范围的区别:
在实际开发中,只需要配置两个对应的依赖就够了:
(2)当前依赖的传递级别
scope属性除了使用默认值,其余的都是不能被传递的:
应该是junit和servlet被传递了:
(四)maven依赖的传递原则*
maven01项目:
maven02项目:
maven03项目:
maven04项目:
查看结果:
1、路径短的优先
修改maven04的依赖:
2、如果路径一样,看pom.xml 上面的优先
1、路径短的优先
2、 如果路径一样,看pom.xml 上面的优先
(五)maven的依赖排除
如果有一个项目maven01 依赖了多个jar包 junit、c3p0、jdbc 现在有一个项目maven02依赖maven01 但是maven02不想要c3p0的依赖,怎么办?
在maven02项目中配置依赖排除:
四、Maven的生命周期
default lifecycl 构建项目的核心部分,编译、打包、测试、部署等都在改生命周期中
site lifecycl 生成站点、项目报告
每个生命周期都是相互独立的,我们可以使用mvn clean 单独运行一个生命周期
也可以将多个生命周期写在一起来运行 mvn clean test site
每一个生命周期都有三个阶段
在生命周期中只能处于一个阶段:在命令执行的时候,只能在一个阶段运行,比如运行mvn clean命令的时候 执行过程中 可能在处于clean lifecycl 中pre-clean 阶段中。
(1)clean生命周期
pre-clean 执行清理前的准备工作
clean 执行清理命令
post-clean 执行清理后结尾的工作
(2)site
pre-site 执行生成站点前的准备工作
site 执行生成站点
post-site 执行生成站点后结尾的工作
(3)default
该生命周期是根据命令执行的 是根据最新的具体命令来决定声明周期执行内容的,在=执行的过程中 ,数据默认的顺序依次执行。