什么是Maven
Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中..
**Maven是一款跨平台的项目管理工具,**是一个开源的项目...
Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理...
POM怎么理解呢???
- 我们使用Java是面向对象编程,对象就是我们的类
- 而Maven是面向项目,把我们的项目看做成是一个对象来进行管理
为什么要使用Maven??
在没有使用Maven之前,我们的jar包是不是非常杂乱???看一下我存放jar包的地方
在没有学习Maven之前,我还想过把这些jar包一一整理出来,万一硬盘坏了,那我的jar包又要去重新找了..而且由于jar包版本的问题,已经吃过不少亏...这就需要大量时间去整理jar包了...
曾经想手动打jar包,结果Intellij idea好像不太支持这种功能??【我还没找到】....于是只能依靠原生的jar 命令去打jar包了,过了一阵子,想重新打jar包的时候,又忘记命令了...非常苦恼...
而我们的Maven就非常好地解决了上面这两种情况了,当然了,Maven的功能并不是只有这么一丢丢,我只是举了两个小例子而已...随着我们的学习,你将会看到Maven的强大之处...
Maven可以管理项目的整个声明周期,包括清除、编译,测试,报告、打包、部署等等。
自动构建项目
- 软件开发: 可行性分析、需求分析、软件设计、软件开发、发布、运维
- 软件构建: 软件已经开发完毕,需要构建成一个产品进行发布 构建步骤:
- 清除--> 编译-->测试-->报告-->打包(jar\war)-->安装-->部署到远程 maven可以通过一个命令实现自动构建软件项目
Maven拥有“约定优于配置“这么一个理念,也就是说,把一些规范约定下来,人们就这么用!如果我们事先约定好所有项目的目录结构,标准开发过程(编译,测试) , 所有人都遵循这个约定。软件项目的管理就会变得简单很多。比如:如何过马路(红灯停绿灯行),如何开门,关门等。
安装Maven
去官网下载Maven软件,解压过后就算安装完毕了...
配置环境变量
因为Maven是由Java编写的,因此想要使用Maven,首先要配置Java的环境变量...
![](https://i-blog.csdnimg.cn/blog_migrate/86730bf5ada1450e4fbc675c3e42b262.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/a49dd1e97864b4c3ff24bb10afc757d7.webp?x-image-process=image/format,png)
检测安装Maven是否成功,在控制台上打上 mvn -version就行了...
![](https://i-blog.csdnimg.cn/blog_migrate/517e8a12a1d757deeae4c707c9eead3b.webp?x-image-process=image/format,png)
Maven目录结构
![](https://i-blog.csdnimg.cn/blog_migrate/81be0ad3ded72811e41e6324b89aa560.webp?x-image-process=image/format,png)
- bin:含有mvn运行的脚本
- boot:含有plexus-classworlds类加载器框架
- conf:含有settings.xml配置文件
- lib:含有Maven运行时所需要的java类库
- Settings.xml 中默认的用户库: ${user.home}/.m2/repository[通过maven下载的jar包都会存储到指定的个人仓库中]
- Maven默认仓库下载地址在: maven的lib目录下maven-model-builder-3.0.4.jar的pom.xml中
在我们Maven中,有本地仓库这么一个概念,我们可以在settings.xml配置文件中修改本地仓库的位置,比如我把本地仓库放到桌面上
![](https://i-blog.csdnimg.cn/blog_migrate/fa283905bd73be7c6e0bc6ff4e409fc3.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/a9488cbe73015c30a616cd5d9085640a.webp?x-image-process=image/format,png)
IDEA下使用Maven
详情可参照详细的Maven教程---Idea环境下
值得追加的是:在修改web.xml路径的时候,那篇博文并没有给出绝对的路径...这里可能有些人不知道怎么写。我给出来参考
X:\Users\ozc\Desktop\zhongfucheng3\src\main\webapp\WEB-INF\web.xml
maven术语
在我们上一篇中已经知道了在Intellij idea下是如何使用Maven的了,创建出来的目录结构是这样子的:
![](https://i-blog.csdnimg.cn/blog_migrate/2f4a4902705558d31067e336bb81cb5d.webp?x-image-process=image/format,png)
上面的目录结构就是Maven所谓的”约定“,我们使用Maven来构建Java项目,都是这种目录结构的...
接下来我们来了解一下Mavaen一些常用的术语
仓库
本地仓库
- Maven会把我们项目所构建出来的jar包等等资源存放在本地仓库中。当我们需要jar包的时候,Maven第一时间也是去本地仓库中寻找jar包
中心仓库:
- ** 当Maven在本地仓库和私服找不到我们需要的jar包的时候,就去中心仓库中帮我们下载对应的jar包**。那Maven怎么知道去哪里下载呢??其实Maven已经配置好的了
apache-maven-3.2.1\lib\maven-model-builder-3.2.1\org\apache\maven\model下的POM.xml文件中已经配置好了
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>http://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Central Repository</name>
<url>http://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
私有服务器
- 存储一些jar包的服务器,由于本地仓库不可能拥有大部分的jar包,一个团队要去开发,免不了总是去中心仓库下载,这就非常耗费时间了。如果私有服务器拥有这些jar包,那么每台电脑就不用去中心仓库中下载了...
maven软件构建的生命周期
软件的生命周期就是以下
-** 清除--> 编译-->测试-->报告-->打包(jar\war)-->安装-->部署**
maven生命周期命令插件
当我们使用idea环境下开发,maven生命周期的插件就非常清晰了...
![](https://i-blog.csdnimg.cn/blog_migrate/0f62982ff8bb1142c819d0dfa52beb6b.webp?x-image-process=image/format,png)
maven坐标
- 坐标的组成: groupId + artifactId+ version
- groupId:组id ,机构名,公司名:好比公司的id,或者是公司包名 alibaba ——-》高德--》5.01版本
- artifactId:构建物id ,产品名或者产品的id
- version :版本号
- jar包组成: artifactId-version.jar
pom.xml介绍
pom.xml介绍 :project object model 项目对象模型 ,它是maven核心配置文件
当我们把上面的术语了解完以后,对下面pom.xml配置文件就不会感到陌生了。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>zhongfucheng3</groupId>
<artifactId>zhongfucheng3</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
如果我们想要我们的项目能够有Junit测试的开发包,我们只要指定对应的jar包依赖就行了..
![](https://i-blog.csdnimg.cn/blog_migrate/2617ff25e510b50fac05d9f91af38fb8.webp?x-image-process=image/format,png)
scope应用范围有test、compile等等,默认是compile,那么test和compile有什么区别呢?
- 间接依赖问题 :依赖的jar包必须是 compile 范围,假如是test范围,则发布的jar包不会包含test范围依赖的jar包,和依赖关系
<scope>test</scope>