写在前面:
- 本文转载了https://blog.youkuaiyun.com/u012152619/article/details/51473404的很多内容,多谢!
- 刚开始写,刚开始学,不好之处还请批评指正!
一、介绍
-
Maven是Apache软件基金会组织维护的一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。它并不是一个框架,但是它其中的一个功能是用来帮助开发者管理框架所需的jar包。
-
当然,管理jar只是maven的一个基本功能,它还有许多各种各样的功能便于管理项目,比如管理多模块协同开发,内置web server快速开发测试,连接控制远程服务器,自动上传部署项目,一键切换服务器环境等等。
-
Maven正在逐渐取代Ant,很多java开源软件(Spring、Struts2 ……)已经使用maven。
-
鉴于初学,我先掌握Jar管理吧。
二、Maven核心概念
(一)Maven的三大仓库:
- 本地仓库:Maven最先在本地仓库寻找依赖,下载的依赖也会存放在此处。
默认地址是本机 C:\Users\dell.m2\repository;我这边做了修改,是F:\dev\plugins\maven\m2\repository。
在maven的解压目录中的conf/settings.xml即可修改。如下:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository -->
<localRepository>F:\dev\plugins\maven\m2\repository</localRepository>
-
远程仓库(私服)
还没搭建过,后期有机会再补上。 -
中央仓库
所有的maven项目都有一个超级POM.XML
-
超级pom.xml 指所有的pom.xml都继承的一个父pom,像java中所有类都是Object的子类。
-
如何在windows文件系统中找到super pom :
- 在maven本地仓库的如下位置:org\apache\maven\maven-model-builder\3.0.4
- 打开该路径下的如下jar包: maven-model-builder-3.0.4-sources.jar
- 在该jar包的如下路径下: org\apache\maven\model\
- 可以找到超级pom:pom-4.0.0.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>
可以看到,默认的地址是:http://repo1.maven.org/maven2/ 可以根据需要改成速度更快的公共中央服务。
我这边只是为这个中央服务设置了一个阿里的镜像,从而提高下载速度;如下:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<!--这段话是什么意思呢?关键点在于<mirrorOf>central</mirrorOf>,它是说,把我提供的这个阿里云的源当作central源的代理吧,以后你需要访问那个名为central的源时,就把所有的请求转发到我阿里云上-->
<mirrorOf>central</mirrorOf>
<!--
那么central又是什么呢?原来maven自己内置了一个超级POM,里面预先定义了名为central对应的地址:
<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>
可以看到,central这个id对应的是http://repo.maven.apache.org/maven2
-->
</mirror>
</mirrors>
- 下面是从别人那里copy过来的其他镜像:
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<mirror>
<id>ui</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://uk.maven.org/maven2/</url>
</mirror>
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>JBossJBPM</id>
<mirrorOf>central</mirrorOf>
<name>JBossJBPM Repository</name>
<url>https://repository.jboss.org/nexus/content/repositories/releases/</url>
</mirror>
从别人那里拷贝过来的 maven 项目寻找 jar 的路径图:
(二)Maven的生命周期
1. 概念理解:
- 结合网上的解释:Maven对项目开发过程中,编译、测试、打包、部署等阶段管理时,将“对项目执行的操作任务”抽象出来的阶段概念.
2. Maven 三套独立的生命周期
- Clean 在进行真正的构建之前进行一些清理工作
- Default 构建的核心部分,编译,测试,打包,部署等等
- Site 生成项目报告,站点,发布站点
3. 生命周期导图
-
每个生命周期包含很多阶段,我们执行的命令 如 mvn install 中的“install” 就是来自default生命周期的一个阶段。如下copy的图:
在每个生命周期内执行对应的阶段命令,同时也会出发该阶段之前的阶段任务。如 -
执行“mvn clean” maven 会先执行 “mvn pre-clean” 再执行 “clean” 。
-
执行“mvn post-clean” ,那么 “pre-clean”,“clean” 都会被运行。
-
这也是为什么我们执行install,前面的编译、打包、验证都会被执行。
4. 各个阶段详细说明
在上图中,clean和site都已经列出所有的阶段,但是default并没有列出22个所有阶段,各个阶段及其详细说明见
https://blog.youkuaiyun.com/u012152619/article/details/51473404