Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM: Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段中插件(plugin)目标的逻辑 。
Maven解决了以上问题,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点。
pom.xml
文件中添加所需jar包的坐标。项目运行时,通过读取坐标到一个专门用于存放jar包仓库(Maven仓库)找到相应的jar包。mysql-connector-java-8.0.13.jar
,如果没有Maven,我们就需要将这个jar文件copy到两个项目中;使用Maven以后,我们只需要下载这个jar文件到Maven仓库,然后两个项目都可以使用同一份jar依赖。指的是项目从编译、测试、打包、安装,部署整个过程都交给maven进行管理,这个过程称为构建。整个过程,maven可以一键执行。
pom.xml
中的依赖坐标,先从本地仓库中寻找,如果没有找到就会从远程仓库中寻找并下载,并且保存在本地仓库中,下次使用就不需要下载了。http://repo1.maven.org/maven2
,由于国内下载速度很慢,所以我们一般使用阿里仓库https://maven.aliyun.com/repository/central/
官网地址:http://maven.apache.org/download.cgi
由于Maven使用Java语言开发,具有跨平台性,所以Maven不区分操作系统
解压后放到无中文,无空格的目录下
目录结构
bin
:存放了 maven 的命令,比如mvn tomcat7:run
boot
:存放了一些 maven 本身的引导程序,如类加载器等
conf
:存放了 maven 的一些配置文件,如setting.xml
文件
lib
:存放了 maven 本身运行所需的一些 jar 包
将maven安装目录配置到环境变量MAVEN_HOME
在path中添加%MAVEN_HOME%\bin
注意:Maven的运行依赖于JAVA_HOME
配置完成后,可以使用命令:mvn -v
验证
maven/conf/settings.xml
<localRepository>E:/Maven/maven-jar</localRepository>
由于默认服务器在国外,所以配置镜像可以提升下载速度
阿里镜像
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<!--老地址
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
-->
<!--新地址-->
<url>https://maven.aliyun.com/repository/central/</url>
</mirror>
mvn help:system
首次执行mvn help:system
命令,Maven相关工具自动帮我们到Maven中央仓库下载缺省的或者Maven中央仓库更新的各种配置文件和类库(jar包)到Maven本地仓库中。
下载完各种文件后,mvn help:system
命令会打印出所有的Java系统属性和环境变量,这些信息对我们日常的编程工作很有帮助。
注意:maven工程必须按照约定的目录结构创建
src
main
java
:存放java源代码resources
:项目资源文件,例如各类配置文件test
java
:测试程序源码resources
:测试资源文件pom.xml
:项目对象模型,主要用来描述项目是如何组成的及构建的# 查看maven版本
mvn -version
# 或者使用
mvn -v
# 初始化仓库
mvn help:sysetem
# 清除target目录
mvn clean
# 编译项目
mvn compile
# 运行测试代码
mvn test
# 项目打包
mvn package
# maven支持组合命令使用,例如先清除target再打包
mvn clean package
# maven可以使用-Dparam=value给插件传参
# 例如可以使用-Dmaven.test.skip=true,给maven-surefire-plugin插件传参,不执行测试用例,也不编译测试用例类
mvn package -Dmaven.test.skip=true
# 发布到本地仓库
mvn install
# 发布到本地仓库及远程仓库
mvn deploy
# 生成站点文档
mvn site
Maven内置了三个声明周期:clean
、default
、site
,分别对应了三种不同的处理项目的过程。在每个生命周期的过程中都会有很多的阶段(phase),这些阶段按照既定的顺序执行来完成一个项目的构建,由于Maven的声明周期是抽象的,也就是说,阶段本身不具备处理项目的能力。所以各个阶段的工作需要由插件(plugin)来完成,一个插件通常可以完成一个或者多个阶段的工作。每个阶段的工作对应插件中的一个目标(goal)。不同的插件结合起来,就完成了整个项目的构建,一个阶段也可以绑定一个或多个插件目标。
Maven中内置了三套生命周期(依据不同的目的,定义了三种处理项目的过程)
clean lifecycle
负责清理项目default lifecycle
负责项目的构建、发布site lifecycle
负责生成项目站点,即API文档信息网站每个生命周期由若干不同的**阶段(Phase)**组成。阶段代表了生命周期的特殊步骤。
maven的每个阶段都可以使用mvn phasename
来进行命令行调用,但是用连字符(pre-*
、post-*
、或 process-*
)命名的阶段通常不会从命令行直接调用。这些阶段对构建进行排序,在构建之外生成没有用处的中间结果。
clean
生命周期包含以下阶段:
pre-clean
:在清理之前完成一些所需的工作;clean
:删除之前构建出的所有文件;post-clean
:在清理之后完成一些所需的工作。default
生命周期包含了实际构建时需要执行的所有步骤,是最重要的生命周期。该生命周期包含以下阶段:
validate
:验证项目是否正确,所有必要信息是否可用;initialize
:初始化构建状态,例如设置 property 或创建目录;generate-sources
:生成要包含在编译中的任何源代码;process-sources
:处理源代码,例如替换所有引用的值;generate-resources
:生成要包含在包中的资源;process-resources
:将资源复制并处理到目标目录中,准备打包;compile
:编译项目的源代码;process-classes
:对编译生成的文件进行后期处理,例如对 Java 类进行字节码增强;generate-test-sources
:生成要包含在编译中的任何测试源代码;process-test-sources
:处理测试源代码,例如替换所有引用的值;generate-test-resources
:为测试创建资源;process-test-resources
:将资源复制并处理到测试目标目录中;test-compile
:将测试源代码编译到测试目标目录中;process-test-classes
:对测试编译生成的文件进行后期处理,例如对 Java 类进行字节码增强;test
:使用合适的单元测试框架运行测试。这些测试不应要求打包或部署代码;prepare-package
:在实际打包之前,执行准备打包所需的任何操作。这通常会生成已处理但尚未打包的所有文件和目录;package
:获取编译后的代码,并将其打包为可分发的格式,如 JAR;pre-integration-test
:在执行集成测试之前执行所需的操作。这可能涉及一些事项,如设置所需环境等;integration-test
:如有必要,处理包并将其部署到可以运行集成测试的环境中;post-integration-test
:执行集成测试后执行所需的操作。这可能包括清理环境;verify
:运行任何检查以验证包是否有效并符合质量标准;install
:将包安装到本地仓库中,作为本地其他项目中的依赖项使用;deploy
:在集成或发布环境中完成,将最终包复制到远程仓库,以便与其他开发人员和项目共享。常用的maven命令,在执行的时候,其实也就是执行了一部分阶段,例如
mvn compile
:执行从validate
至compile
阶段,完成编译主源代码编译mvn package
:执行从validate
至package
阶段,完成打包mvn install
:执行从validate
至install
阶段,完成包安装到本地仓库mvn deploy
:执行从validate
至deploy
阶段,完成包部署到中心库中pre-site
:在生成实际的项目站点之前执行所需的流程;site
:生成项目的站点文档;post-site
:执行完成站点生成所需的流程;site-deploy
:将生成的站点文档部署到指定的 web 服务器。