简述
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven 也可被用于构建和管理其它各种项目,例如:C#,Ruby,Scala和其它语言编写的项目。
Maven 构建生命周期
Maven 构建生命周期定义了一个项目构建跟发布的过程。一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的:
阶段 | 处理 | 描述 |
validate | 验证项目 | 验证项目是否正确且所有必须信息是可用的 |
compile | 执行编译 | 源代码编译在此阶段完成 |
test | 测试 | 使用适当的单元测试框架(例如JUnit)运行测试 |
package | 打包 | 创建JAR/WAR包,如在 pom.xml 中定义提及的包 |
verify | 检查 | 对集成测试的结果进行检查,以保证质量达标 |
install | 安装 | 安装打包的项目到本地仓库,以供其他的项目使用 |
deploy | 部署 | 拷贝最终的工程包到远程仓库中,以共享给其他的开发人员和其他的工程 |
Maven 功能
Maven 能够帮助开发者完成构建、文档生成、报告、依赖、SCMs、发布等工作
常用命令汇总
创建 Maven 项目模板
Maven 使用 archetype(原型) 来创建自定义的项目结构,形成 Maven 项目模板。archetype 是一个 Maven 插件,准确说是一个项目模板,它的任务是根据模板创建一个项目结构。默认将使用 quickstart 原型插件(maven-archetype-quickstart)创建一个简单的 java 应用程序。
方式一:命令行根据提示选择或填写
mvn archetype:generate
可以按照提示进行选择或填写,默认选的话,直接按回车键即可。
# tree example-all example-all ├── pom.xml └── src ├── main │ └── java │ └── org │ └── example │ └── App.java └── test └── java └── org └── example └── AppTest.java 复制代码
方式二:命令行预先指定填写
mvn archetype:generate -DgroupId=组织名(公司网址的反写+项目名) -DartifactId=项目名—模块名 -Dversion=版本号 -Dpackage=代码所存在的包名
样例:
mvn archetype:generate -DgroupId=com.lgd.example -DartifactId=mvn-example-all -Dversion=1.0.0-SNAPSHOT -Dpackage=com.lgd.example # 或者 mvn archetype:generate -DgroupId=com.lgd.example -DartifactId=sample-all -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false # tree mvn-example-all mvn-example-all ├── pom.xml └── src ├── main │ └── java │ └── org │ └── example │ └── App.java └── test └── java └── org └── example └── AppTest.java 复制代码
验证项目是否正确
mvn validate
清理maven项目
mvn clean
编译
编译源代码
mvn compile
编译测试代码
mvn test-compile
运行测试
mvn test
打包
mvn package
# 清除以前的包后重新打包,跳过测试类 mvn clean package -Dmaven.test.skip=true 复制代码
只打jar包
mvn jar:jar
生成源码jar包
mvn source:jar
运行检查
mvn verify
安装项目到本地仓库
mvn install
发布项目到远程仓库
mvn deploy
查看项目的maven依赖
显示maven依赖树
mvn dependency:tree
显示maven依赖列表
mvn dependency:list
下载依赖包的源码
mvn dependency:sources
生成项目相关信息的网站
mvn site
WEB相关命令
启动tomcat
mvn tomcat:run
启动jetty
mvn jetty:run
Maven三大生命周期
Maven有三套相互独立的生命周期,分别是clean、default和site。每个生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。
clean周期
主要用于清理上一次构建产生的文件,可以理解为删除target目录。
- pre-clean:执行清理前需要完成的工作
- clean:清理上一次构建生成的文件
- post-clean:执行清理后需要完成的工作
命令:
mvn clean 复制代码
default周期
主要阶段包括:
- process-resources:默认处理
src/main/resources/
下的文件,将其输出到对应的classpath目录中。 - compile:编译
src/main/java
下的java文件,产生对应的class。 - process-test-resources:默认处理
src/test/resources/
下的文件,将其输出到对应的classpath目录中。 - test-compile:编译
src/test/java
下的java文件,产生对应的class。 - test:运行测试用例。
- package:打包构件,即生成对应的jar包、war包等。
- install:将构件部署到本地仓库。
- deploy:部署构件到远程仓库。
命令:
mvn install mvn package mvn clean package # 调用clean生命周期的clean阶段和default生命周期的package阶段 复制代码
site周期
主要阶段包括:
- site:产生项目的站点文档。
- site-deploy:将项目的站点文档部署到服务器。
命令:
mvn site 复制代码
package、install、deploy三者的区别
mvn clean package
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。mvn clean install
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。mvn clean deploy
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。
由上面的执行流程可知,主要区别如下,
- package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)部署到本地maven仓库和远程maven私服仓库
- install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)部署到本地maven仓库,但没有布署到远程maven私服仓库
- deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)部署到本地maven仓库和远程maven私服仓库