Maven常用命令小结

420 阅读5分钟

这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战

简述

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven 也可被用于构建和管理其它各种项目,例如:C#,Ruby,Scala和其它语言编写的项目。

Maven 构建生命周期

Maven 构建生命周期定义了一个项目构建跟发布的过程。一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的: image.png

阶段处理描述
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目录。

  1. pre-clean:执行清理前需要完成的工作
  2. clean:清理上一次构建生成的文件
  3. post-clean:执行清理后需要完成的工作

命令:

mvn clean

default周期

主要阶段包括:

  1. process-resources:默认处理src/main/resources/下的文件,将其输出到对应的classpath目录中。
  2. compile:编译src/main/java下的java文件,产生对应的class。
  3. process-test-resources:默认处理src/test/resources/下的文件,将其输出到对应的classpath目录中。
  4. test-compile:编译src/test/java下的java文件,产生对应的class。
  5. test:运行测试用例。
  6. package:打包构件,即生成对应的jar包、war包等。
  7. install:将构件部署到本地仓库。
  8. deploy:部署构件到远程仓库。

命令:

mvn install
mvn package
mvn clean package # 调用clean生命周期的clean阶段和default生命周期的package阶段

site周期

主要阶段包括:

  1. site:产生项目的站点文档。
  2. 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私服仓库

参考文档