Maven

Maven的使用原因

(1)添加第三方jar包,在一个项目开始的时候,我们一般是考虑使用什么框架与工具。而这些框架与工具的具体体现就是jar包。引入这些jar包后,我们便可以使用这些框架工具。而每次启用新项目都需要引入jar包,使得这些jar包会在工作区有很多的重复,这样会太混乱。而引入Maven技术就可以在本地只保存一份jar包,而项目使用的时候则只需在pom,.xml文件中声明所需要jar包的坐标就可以使用。(其实从网上一个个下jar包也很难受。。。。)
(2)jar包的依赖关系,通常在使用jar包时,他们并不是独立存在的,即一个jar包的类中可能会使用其他jar包,这就是jar依赖。有时候我们在使用的时候并不知道其依赖,这样现有程序则会无法启动。Maven不仅可以帮我们把当前jar包导入仓库,还可以将其相关依赖jar包自动导入。
(3)解决jar包冲突,使用Maven就可以自动的处理jar包之间的冲突问题。因为Maven中内置了两条依赖原则:最短路径者优先和先声明者优先。
(4)将项目拆分成多个工程模块

Maven是什么

1、 Maven 译作,专家,内行。读音,['mevn],不要读作“马文”;

2 、Maven是一键自动化构建工具,专注服务于Java平台的项目构建和依赖管理。

3、构建的概念,构建并不是创建,创建一个工程并不等于构建一个项目。要了解构建的含义我们应该由浅入深的从以下三个层面来看:
①纯Java代码
大家都知道,我们Java是一门编译型语言,.java扩展名的源文件需要编译成.class扩展名的字节码文件才能够执行。所以编写任何Java代码想要执行的话就必须经过编译得到对应的.class文件。
②Web工程
当我们需要通过浏览器访问Java程序时就必须将包含Java程序的Web工程编译的结果“拿”到服务器上的指定目录下,并启动服务器才行。这个“拿”的过程我们叫部署。
我们可以将未编译的Web工程比喻为一只生的鸡,编译好的Web工程是一只煮熟的鸡,编译部署的过程就是将鸡炖熟

4、构建环节 :
清理:删除以前的编译结果,为重新编译做好准备。
编译:将Java源程序编译为字节码文件。
测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
报告:在每一次测试后以标准的格式记录和展示测试结果。
打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对应war包。
安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。。

5、 Maven的核心概念
Maven之所以能够实现自动化的构建,和它的设计是紧密相关的。我们对Maven的学习就围绕它的九个核心概念展开:
POM:Project Object Model:项目对象模型。将Java工程的相关信息封装成对象作为便于操作和管理的模型。Maven工程的核心配置,可以说学习Maven就是学习pom.xml的配置。
约定的目录结构 约定大于配置
坐标 通过三个向量在Mavne仓库中唯一确定一个Maven工程
groupId:公司或组织的域名倒序+当前项目的名称
artifactId:当前项目的模块名称
version:当前模块的版本
如何通过坐标寻找jar包
将gav三个向量连起来
以尚硅谷为例:com.atguigu.maven+Hello+0.0.1-SNAPSHOT
以连起来的字符串作为目录结构到仓库中查找
com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1SNAPSHOT.jar
自己的Maven工程需要上传才会进入仓库,mvn install
依赖管理
基本概念:当Ajar包需要用到Bjar包中的类时,我们就说A对B有依赖。
直接依赖和间接依赖
如果A依赖B,B依赖C,那么A->B,B->C都是直接依赖,A->C是间接依赖。
依赖范围
compile :
main目录下的Java代码可以访问这个范围的依赖
test目录下的Java代码可以访问这个依赖
部署到Tomcat服务器上运行时要放在WEB-INF的lib目录下
test:
main目录下的Java代码不能访问这个范围的依赖
test目录下的Java代码可以访问这个依赖
部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
例如对junit的依赖,仅仅是测试部分需要
Provided:
main目录下的Java代码可以访问这个范围的依赖
test目录下的Java代码可以访问这个依赖
部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
例如:servlet-api在服务器运行时,Servelt容器会提供相关API,部署时不需要
依赖的原则:解决jar包冲突
路径最短者优先
路径相同时先声明者优先(这里“声明”的先后顺序指的是dependency标签配置的先后顺序。)
5、仓库管理
Maven仓库分为本地仓库,远程仓库。
本地仓库,为本机电脑上的Maven工程服务
远程仓库:私服,当前局域网环境内的所有Maven工程服务
中央仓库,在Internet上,为全世界所有Maven工程服务
中央仓库镜像,架在在各大洲,为中央仓库分流。可以更快响应用户请求。
仓库中的文件:
Maven的插件,第三方框架或工具的jar包(存放在仓库的jar包可以通过坐标进行使用)。
注:中央仓库每天访问的人太多了,所以很必要使用镜像,例如,阿里云镜像,贼快。
本地仓库默认为C:\User\UserName的m2文件夹下。在maven核心程序的conf文件夹的settings.xml文件中可修改本地仓库。

还可在mirrors标签内设置镜像,本图为阿里云镜像
在这里插入图片描述
6、生命周期
Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构 建命令了。
Maven有三套相互独立的生命周期,分别是:
Clean Lifecycle在进行真正的构建之前进行一些清理工作。
Default Lifecycle构建的核心部分,编译,测试,打包,安装,部署等等。
Site Lifecycle生成项目报告,站点,发布站点。
运行任何一个阶段的时候,它前面的所有阶段都会被运行,例如我们运行mvn install 的时候,代码会被编译,测试,打包。这就是Maven为什么能够自动执行构建过程的各个环节的原因。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。
7、插件和目标
Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。
每个插件都能实现多个功能,每个功能就是一个插件目标。
Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
例如:compile就是插件maven-compiler-plugin的一个功能;pre-clean是插件maven-clean-plugin的一个目标。

Maven的具体使用

安装Maven核心程序
下载地址:https://maven.apache.org/
下载二进制maven-bin压缩包

解压到自己选择的文件夹,如,D:\Maven\apache-maven-3.6.3
同时在maven核心程序的同一目录下建立RepMaven文件夹作为本地仓库。

在IDEA中配置Maven

Settings->Build,Execution…->Maven
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述 可以先不配置该处,在建立骨架时出现unable to find valid certification该错误后再在VM Options处加入-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true。出现unable to find valid certification 错误是因为证书审查的问题。加入那句后可跳过证书安全检查。

在IDEA中使用骨架建立Maven工程
在这里插入图片描述
在这里插入图片描述
骨架构建正确展示
在这里插入图片描述
如果按上述步骤在构建骨架时出现问题,
例如,下图标红,可能是网络原因将出错的地方在Maven仓库中找到删除下载失败的文件,重新下载,即可解决。注:如果尝试很多次后都是下载失败,可以选择更换网络重试。
在这里插入图片描述
使用maven建立简单的Servlet程序
在使用IDEA建立servlet程序后,会发现报错,错误原因是没有找到javax.servlet.http.HttpServlet该类。所以我们引入依赖,并在其中加入scope标签填入provided
在这里插入图片描述

这时报错将会消失,此时可以运行mvn的命令,mvn tomcat:run
仍然会发现有错误,此时错误的原因是,我们为了清除在servlet程序中的错误引入了servlet-api,jsp-api的jar包,而这些jar包在我们自己的tomcat中也有,导致jar包重复且冲突。此时设置我们前面讲到的依赖范围。因为我们此时引入jar包只是为了能让servlet程序能找到依赖,而在部署到tomcat中后其依赖应该是tomcat所带的依赖。所以使用scope标签,设置依赖范围为provided,不会在部署的时候将jar包打包上去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值