什么是Maven坐标?
对应于平面中的点和城市中的地址,Maven的世界中拥有数量非常巨大的构件,也就是大家平时用的一些jar、war等文件。在Maven为这些构件引入坐标概念之前,我们无法使用任何一种方式来唯一标识所有这些构件,因此,当需要用到Spring Framework依赖的时候,大家会去Spring Framework网站寻找,当需要用到log4j依赖的时候,大家又会去Apache网站寻找。又因为各个项目的网站风格迥异,大量的时间花费在了搜索、浏览网页等工作上面。没有统一的规范、统一的法则,该工作就无法自动化。重复地搜索、浏览网页和下载类似的jar文件,这本就应该交给机器来做。而机器工作必须基于预定义的规则,Maven定义了这样一组规则:世界上任何一个构件都可以使用Maven坐标唯一标识,Maven坐标的元素包括groupId、artifactId、version、packaging、classifier。现在,只要我们提供正确的坐标元素,Maven就能找到对应的构件,比如说,当需要使用Java5 平台上TestNG的 5.8 版本时,就告诉Maven:"groupId=org.testng; artifactId=testng; version=5.8;classifier=jdk15",Maven就会从仓库中寻找相应的构件供我们使用。也许你会奇怪,"Maven是从哪里下载构件的呢?"答案其实很简单,Maven内置了一个中央仓库的地址(http://repo1.maven.org/maven2),该中央仓库包含了世界上大部分流行的开源项目构件,Maven会在需要的时候去那里下载。在我们开发自己项目的时候,也需要为其定义适当的坐标,这是 Maven 强制要求的,在这个基础上,其他 Maven 项目才能引用该项目生成的构件
根元素 project 下的 dependencies 可以包含一个或者多个 dependency 元素,以声明一个或者多个项目依赖。每个依赖可以包含的元素有:
groupId、artifactId 和 version:依赖的基本坐标,对于任何一个依赖来说,基本坐标
是最重要的,Maven 根据坐标才能找到需要的依赖。
type:依赖的类型,对应于项目坐标定义的 packaging。大部分情况下,该元素不必声
明,其默认值为 jar。
scope:依赖的范围。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。
大部分依赖声明只包含基本坐标,然而在一些特殊情况下,其它元素至关重要
![](https://i-blog.csdnimg.cn/blog_migrate/f14939c8cd4eb09198db2a3f1dc91e6e.png)
生命周期
Maven定义了三套生命周期:clean、default、site,每个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命 周期中的phase却是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两 套生命周期中的任何phase。
- clean,做些清理的工作
- default,最核心的周期,做初始化和构建的工作,里面分的阶段很多,主要是compllie,test, package, install等
- site,生成站点的周期,包括生成文档和发布等
Maven的生命周期是抽象的,实际需要插件来完成任务,这一过程是通过将插件的目标(goal)绑定到生命周期的具体阶段(phase)来完成的。这里就像设计模式中的模板模式,父类定义好了方法模板并规定对了执行顺序,而子类定义了每个模板方法具体要做的事情。这里的父类相当于maven,而子类就像是一个个的插件。
比如compile这个阶段,对应的是mvn complie这个命令,但是实际上是maven-compiler-plugin这个插件在起作用每个插件在执行的时候会有多个任务,每个任务被称作这个插件的一个目标(goal),这个目标都是可以对应上maven生命周期中某个阶段(phase)的,这里重新看下上述mvn install命令(其中有个插件就是叫做maven-install-plugin)的执行结果
仓库
Maven 本地存储库是一个在本地计算机上的一个文件夹位置。当你第一次运行 maven 命令的时候它就被创建了。
Maven 的本地资源库让您的项目可依赖这些项目(插件库 jar 文件,jar文件等)。当运行 Maven 构建,那么 Maven 会自动下载所有依赖的jar到本地存储库中。它有助于避免依赖存储在远程机器上的项目建立参考。
Maven 本地存储库,默认情况下创建在 %USER_HOME% 目录。要覆盖默认位置,可在 Maven 的 settings.xml 文件中修改 %M2_HOME%conf 目录指向另一个路径。
Maven中央存储库是由Maven社区提供的资源库。它包含了大量的常用程序库。
maven常用基本命令:
<code class="hljs groovy">mvn archetype:create 创建Maven项目
mvn compile 编译源代码
mvn deploy 发布项目
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn <span class="hljs-keyword">package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn <span class="hljs-string">eclipse:eclipse 生成eclipse项目文件
<span class="hljs-string">mvnjetty:run 启动jetty服务
<span class="hljs-string">mvntomcat:run 启动tomcat服务
mvn clean <span class="hljs-keyword">package -Dmaven.test.skip=<span class="hljs-string">true:清除以前的包后重新打包,跳过测试类</span></span></span></span></span></span></code>