声明:部分图片来自百战程序员
目录
Maven的作用
Maven的运行原理
Maven工程的类型和结构
Maven工程类型
Maven工程结构
仓库类型
Settings配置文件
安装maven
把maven配置到idea里
maven里的一些标签
jar包的依赖范围
maven的继承
创建聚合项目
重点:web工程的jsp页面默认是访问webapp目录下的页面
我们可以通过几点来对Maven进行总结
一键构建
我们的项目往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程,这些过程称之为构建。通过Maven工具,可以使用 简单的命令轻松完成构建工作。
依赖管理
传统的Web项目中,我们必须将工程所依赖的jar包复制到工程中,导致了工程的变得很大。如果一个公司具有相同架构的项目有十个,那么就需要将这一份jar包复制到十个不同的工程中,非常浪费资源。
传统Web项目中大部分磁盘空间是被jar包占据,而Maven项目中一定没有jar包,那没有jar包的项目是怎么运行的呢?
maven工程中不直接将jar包导入到工程中,而是有一个专门存放jar包的仓库,仓库中的每个jar包都有自己的坐标。maven工程中只要配置jar包坐标即可,运行项目需要使用jar包时,根据坐标即可从maven仓库中拿到jar包即可运行。
接下来我们通过一个WAR工程学习Maven工程的结构
文件目录结构:
项目结构:
本地仓库
本地仓库指用户计算机中的文件夹。用来存储从远程仓库或中央仓库下载的jar包,只有下载到本地仓库的jar包才能使用,项目使用jar包时优先从本地仓库查找。
远程仓库
远程仓库一般指私服,它是架设在局域网的仓库服务,可以从中央仓库下载资源,供局域网使用,从而减少每个程序员都从中央仓库下载浪费的带宽。
如果项目需要的jar包本地仓库没有,则会去远程仓库下载,下载到本地仓库即可使用。
远程仓库不是必须配置的,如果本地仓库没有jar包,也没有配置远程仓库,则会直接从中央仓库下载。
中央仓库
中央仓库是互联网上的服务器,是Maven提供的最大的仓库,里面拥有最全的jar包资源。
如果项目需要的jar包,本地仓库和远程仓库都没有,则会去中央仓库下载,下载到本地仓库使用。
Maven中央仓库访问页面: https://mvnrepository.com/
中央仓库访问速度较慢,我们一般都会配置镜像代理中央仓库的下载请求,如阿里镜像、华为镜像等。
配置本地仓库
在
配置镜像
由于中央仓库访问速度较慢,可以配置镜像代理中央仓库的下载请求。在
nexus-aliyun
central
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public
配置JDK版本
创建maven项目的时候,默认使用的JDK是1.5版本,验证语法、编译、运行时都会按照JDK1.5操作,所以很多小伙伴经常在运行的时候汇报版本太低异常。我本机安装的JDK是JDK11,可以配置maven按照JDK11创建项目。
在
jdk11
true
11
11
11
11
maven是apache的开源项目,所以如果想要下载maven的话,那么可以直接去apache的官网寻找下载
Apache DownloadsHome page of The Apache Software Foundationhttps://maven.apache.org/download.cgi%E5%8D%B3%E5%8F%AF%E5%AE%8C%E6%88%90%E4%B8%8B%E8%BD%BD
配置环境变量
由于Maven是由Java语言开发的,运行时依赖Java环境,所以要在计算机的环境变量中配置JAVA_HOME
为了更方便的使用Maven命令,需要在环境变量中配置MAVEN_HOME和Path
查看版本
打开CMD命令窗口,输入mvn -v,显示Maven版本和Java版本,证明安装成功
idea的设置(Settings)中配置maven插件
Maven home directory就是maven的根目录
User settings file就是Maven的配置文件,它位于maven根目录下conf目录下
Local repository就是本地仓库
parent标签代表父工程(相当于java的继承,但是只能单继承),
dependencies标签代表依赖(相当于java的继承,可通过依赖模拟出多继承),
plugins标签代表插件
groupId:是项目src目录下main目录下java目录下的项目结构,实际对应JAVA的包的结构
ArtifactId:是项目的名称
Version :是项目的版本号
1.0-SNAPSHOT 。其中1.0是版本号,SNAPSHOT版本代表不稳定、尚处于开发中的版本。而衍生的有Release版本则代表稳定的版本
访问servlet后,发现报500异常,这是为什么呢?
这是由于项目中引入了Servlet和Jsp的jar包,而在项目运行时,Tomcat要使用它自带的Servlet和Jsp的jar包,这样就造成了jar包冲突。但如果项目不引入Servlet和Jsp的jar包,则根本无法通过编译。
此时可以设置依赖的作用范围解决该问题,设置Servlet和Jsp的jar包只在编译期起作用,运行时不起作用,这样不仅可以通过编译,还能在运行时避免jar包冲突。
通过在
javax.servlet.jsp
jsp-api
2.2
provided
javax.servlet
javax.servlet-api
3.0.1
provided
所以对于Servlet和Jsp依赖,我们添加依赖范围为provided即可。
Maven聚合开发_继承关系
Maven中的继承是针对于父工程和子工程。父工程定义的依赖和插件子工程可以直接使用。注意父工程类型一定为POM类型工程。
多继承
在Maven中对于继承采用的也是单继承,也就是说一个子项目只能有一个父项目。但我们可以在
com.itbaizhan
parent_a
1.0-SNAPSHOT
pom
import
com.itbaizhan
parent_b
1.0-SNAPSHOT
pom
import