前言

我们在日常开发中都会用到maven,gradle…这些项目管理工具。他们能帮助我们快速构建一个新项目,管理项目的jar包依赖关系。我们可以使用maven提供的命令来和maven进行交互,让maven帮我们测试,编译,打包等等一系列操作。对于一些新手来说记住那些mvn 命令还是难以接受的,毕竟现在主流的eclispe和idea都可以集成maven,我们完全可以利用eclispe中的图形化工具来操作maven,操作简单,不需要刻意的记那些maven命令,爽歪歪。工具虽然方便,但是我们应该清楚图形化工具背后依旧是maven的操作命令,有时候工具使用习惯了,人就不自觉的变懒惰了。哪天工具出现问题,抑或是换了工具,我们就会因为不了解底层的原理而无所适从。所以这里来和大家一起学习maven的生命周期,以及常见的maven 命令。

maven常见命令##

经常在eclipse中操作maven的小伙伴,相比对下面的这个界面很熟悉。

mvn项目如何运行java文件 mvn命令在哪执行_生命周期


上图中的maven clean ,maven install这几个命令到底干啥的?这些命令有啥关联?之前项目是使用dubbo来服务化的,需要把服务提供者打成jar发布到公司私库,然后由消费者来引入依赖。那时候不知道怎么把项目发布到私库,反正按照组长说的在下面的界面的goal中填上deploy,然后看编译是否成功。

mvn项目如何运行java文件 mvn命令在哪执行_mvn项目如何运行java文件_02


但是,上面的Goals,deploy是啥,完全不懂啊,一脸懵逼(小白的悲哀)。其实在eclipse里面执行的操作底层还是在执行mavne命令,而maven本身是不支持那些命令操作的,这些操作都是有对应的插件来完全的。

下面maven比较常见的一些命令

命令

说明

mvn –version

显示版本信息

mvn clean

清理项目生产的临时文件,一般是模块下的target目录

mvn compile

编译源代码,一般编译模块下的src/main/java目录

mvn package

项目打包工具,会在模块下的target目录生成jar或war等文件

mvn test

测试命令,或执行src/test/java/下junit的测试用例.

mvn install

将打包的jar/war文件复制到你的本地仓库中,供其他模块使用

mvn deploy

将打包的文件发布到远程参考,提供其他人员进行下载依赖

mvn site

生成项目相关信息的网站

mvn eclipse:eclipse

将项目转化为Eclipse项目

mvn dependency:tree

打印出项目的整个依赖树

mvn archetype:generate

创建Maven的普通java项目

mvn tomcat:run

在tomcat容器中运行web应用

mvn jetty:run

调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用

上面是一些常用的maven命令,这里需要注意的一点是,我们执行上面的maven命令之前,要在当前项目的路径下面,相当于告诉maven我要操作哪个项目,否则maven固然强大,在指令不清晰的时候也是无能为力啊。

2019/3/20备注

上面mvn package这个命令有个问题,执行mvn package的时候会走测试。之前在打包一个springboot项目的时候报数据库连接异常,项目打包之前把数据库配置改为生产环境的数据库配置,mvn package会去执行项目中的测试过程。由于数据库配置是生产环境的,所以连接的时候肯定报错,导致 build 失败。这时候用maven命令在package的时候跳过测试就行了。具体命令如下mvn clean package -Dmaven.test.skip=true ,这样就可以正常打包了。

maven生命周期

Maven的生命周期是对所有的构建过程进行抽象和统一。Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,生命周期只是定义了一系列的阶段,并确定这些阶段的执行顺序。而在执行这些阶段时,实际的工作还是由插件来完成的。而且这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段。
Maven拥有三套相互独立的生命周期,它们分别为clean,default和site。

  • Clean Lifecycle在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle构建的核心部分,编译,测试,打包,部署等等。
  • Site Lifecycle生成项目报告,站点,发布站点。

clean生命周期
clean生命周期的目的是清理项目,它包含三个阶段:
1)pre-clean 执行一些清理前需要完成的工作。
2)clean 清理上一次构建生成的文件。
3)post-clean 执行一些清理后需要完成的工作。
default生命周期
default生命周期定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分,它包含的阶段如下:
1) validate 验证项目是否正确和所有需要的相关资源是否可用
2) initialize 初始化构建
3) generate-sources
4) process-sources 处理源代码
5) generate-resources
6) process-resources 处理项目主资源文件。对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
7) compile 编译项目的主源代码
8) process-classes
9) generate-test-sources
10) process-test-sources 处理项目测试资源文件
11)generate-test-resources
12) process-test-resources 处理测试的资源文件
13)test-compile 编译项目的测试代码
14)process-test-classes
15) test 使用单元测试框架运行测试,测试代码不会被打包或部署
16)prepare-package 做好打包的准备
17)package 接受编译好的代码,打包成可发布的格式
18) pre-integration-test
19) integration-test
20) postintegration-test
21) verify
22) install 将包安装到Maven本地仓库,供本地其他Maven项目使用
23)deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用
site生命周期
site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:
1)pre-site 执行一些在生成项目站点之前需要完成的工作
2)site 生成项目站点文档
3)post-site 执行一些在生成项目站点之后需要完成的工作
4)site-deploy 将生成的项目站点发布到服务器上

用户在mvn命令后可以指定三个生命周期中的任何阶段,则Maven会按以下逻辑执行:首先会得到该阶段所属生命周期,从该生命周期中的第一个阶段开始按顺序执行,直至该阶段本身。例如执行mvnclean命令会依次执行clean生命周期中的pre-clean阶段及clean阶段。mvn命令后可以指定多个阶段,Maven会按照输入的顺序依次执行,每次执行都会按照之前描述的逻辑执行

小结

上面对于maven常用命令的简单整理以及对maven生命周期的介绍,具体的操作需要我们在日常开发中多实践!相信大家都能熟能生巧!