文章目录
Maven简介
Maven是一个项目管理工具。
Maven的作用
1.maven对项目的第三方构件(jar包)进行统一管理。向工程中加入jar包不要手工从其它地方拷贝,通过maven定义jar包的坐标,自动从maven仓库中去下载到工程中。——依赖管理(jar包管理)
2.maven提供一套对项目生命周期管理的标准,开发人员、和测试人员统一使用maven进行项目构建。项目生命周期管理:编译、测试、打包、部署、运行。——项目构建
3.maven对工程分模块构建,提高开发效率。
Maven的概念模型
1.项目对象模型 (Project Object Model)。POM对象模型,每个maven工程中都有一个pom.xml文件,定义工 程所依赖的jar包、本工程的坐标、打包运行方式。
2.依赖管理系统(基础核心 )。maven通过坐标对项目工程所依赖的jar包统一规范管理。
3.maven定义一套项目生命周期。清理、初始化、编译、测试、报告 、打包、部署、站点生成。
4.一组标准集合。maven工程有自己标准的工程目录结构、定义坐标有标准。
5.maven 管理项目生命周期过程都是基于插件完成的,例如:开发中使用的tomcat插件。
Maven的仓库
Maven的仓库类型
- 本地仓库
本机电脑上缓存jar包的文件夹。Maven优先从本地仓库中加载jar包。如果本地仓库中找不到,才会去远程仓库中下载jar包,并把jar包缓存到本地仓库中。- 远程仓库- 私服
一些企业、社区提供的jar仓库服务,这些jar仓库可能对整个互联网提供服务,也可以是一个企业内部使用的jar仓库,所以远程仓库也叫私服。(在公司内部架设一台私服,私服代理其他的远程仓库, 当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从代理的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务,还可以把一些无法从外部仓库下载到的构件上传到私服上。)- 远程仓库- 中央仓库
仓库中jar由专业团队(maven团队)统一维护。中央仓库地址是内置到了Maven软件中的,仓库地址:http://repo1.maven.org/maven2
Maven的坐标
Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。maven查询坐标常用网站
坐标组成:
- groupId:公司域名倒写
- artifactId:项目名/模块名
- version:版本号
Maven安装与配置
安装Maven与配置环境变量
-
安装Maven
Maven是免安装的,直接解压就行。解压后目录结构
主要目录介绍
- bin: Maven的可执行命令文件夹
- boot: Maven的引导程序(类加载器)
- conf : 配置文件夹
- lib: Maven的核心程序代码(Maven的jar’包)
-
配置环境变量
前提:JDK环境变量已经正确配置。
①
MAVEN_HOME
=Maven的解压目录
②环境变量Path中添加
%MAVEN_HOME%\bin
验证Maven是否配置成功,打开cmd,执行命令mvn -version
可查看到Maven的版本信息
配置本地仓库
准备本地仓库文件
在maven的安装目录conf/ settings.xml
文件修改,配置如下:
Maven项目的目录结构
注:一个项目要想使用Maven进行管理,那么这个项目的目录结构就必须要符合Maven的要求
Maven构建项目
项目构建常用命令介绍:(暂且了解)
- 清理Maven项目的target目录:
mvn clean
- 重新编译Maven项目,编译后的结果在自动生成的target目录中:
mvn compile
- 执行Maven项目中的单元测试代码:
mvn test
注:
- 执行的是Maven项目的test目录中的单元测试类
- 单元测试类名必须是Test结尾,例如:DemoTest.java
- 把Maven项目进行打包,java项目打包成.jar, web项目打包成.war,聚合工程打成pom包:
mvn package
- 把Maven项目安装到本地仓库中:
mvn install
注:target目录用来存放项目构建后的文件和目录、jar包、war包、编译的class文件。
Maven管理依赖
1. IDEA创建Maven工程
①IDEA配置Maven
配置后,创建Maven项目时很慢
可做如下设置
1.在VM Options加上-DarchetypeCatalog=local
2.或者在VM Options加上-DarchetypeCatalog=internal
,也较慢。
②创建Maven的java项目
1
2
3
4
5.注意
运行
java工程目录结构
扩展:如要添加配置文件或jar包,则要新建resources文件夹
新建resources文件夹右击
标记后,idea就可以识别该文件夹了
同理
要导入配置文件,新建resources文件夹后按步骤最后选择Test Resources Root
。
缺少java代码编写目录,则新建java文件夹按步骤最后选择Sources Root
。
③创建Maven的JavaWeb项目
创建javaweb项目与创建javase项目类似,选择Maven骨架时,选择maven-archetype-webapp即可:
javaweb项目创建好的目录结构如下,根据我们的需要可在原有目录上按Maven要求的目录结构添加目录,并标记目录。在idea帮我们创建的项目中index.jsp(好像不太规范)和web.xml(版本太低)可删除,导入常用模板。
把maven项目部署到tomcat上与普通方式直接创建javaweb的项目部署在tomcat的方式一样。
但是普通方式直接创建javaweb的项目,它会引入servlet相关jar包,而通过maven创建的javaweb项目创建时并没有引入,所以在编写代码时,创建servlet类会报错,这是我们就需要引入servlet相关依赖。
④引入依赖
项目中需要使用jar包,只需要把jar包的坐标配置到项目的pom.xml中即可,通过导入依赖坐标,无需手动导入jar包就可以引入jar。在pom.xml的<dependencies>
标签里增加以下内容(以上面缺少servlet相关依赖为例):引入后,就可以解决以上没有导入servlet相关jar包的报错了。
⑥依赖范围
创建maven项目时,自动引入的依赖(单元测试相关jar包)如下
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope> <!--依赖范围-->
</dependency>
依赖范围介绍:
如果项目中引入的jar包过多,可能会出现jar包冲突,我们可能设置jar包不同的依赖范围来解决jar包冲突。
Maven的依赖范围:
compile
:默认的依赖范围,在全范围有效test
:单元测试有效,如以上junit使用的就是test范围provided
:其它地方已经提供了,就优先使用已经提供了的。如servlet-api(tomcat容器已提供)通常使用provided范围,jsp-api也是。runtime
:运行时有效,编译时无效,一般数据库的驱动包使用runtime范围。system
:引入本地仓库之外的本地jar包。一般不使用
2.maven的依赖传递
如引入spring-context,spring-context所依赖的包也都会导进来,这就是maven的依赖传递。
3.maven解决jar包冲突问题
①第一声明优先原则
即哪个jar包声明在前面,这个先声明的jar包下的依赖包,就会优先引入到项目中。
②就近原则
如直接依赖比传递依赖路径近,那么优先引入到项目的jar包是路径近的直接依赖包。
说明:直接依赖,即项目中直接导入的jar包就是项目的直接依赖包。
③直接排除法
使用直接排除法,第一声明的jar包不传递依赖4.2.4版本的spring-core
扩展:如何查看依赖关系