任何类型的软件开发中通常都有项目构建生命周期的概念,比如清理、编译、打包、部署等。Maven抽象并为Java开发规范了这些概念,它会在在每个生命周期会调用特定的插件,最终实现项目的构建。对于Maven构建系统,主要有三套生命周期:
clean
阶段没什么可说的,它就是将构建的中间文件和输出等目录清空,将文件目录结构还原为执行构建之前的状态。而对于site
阶段,现代的Java开发中建立站点也并非基于Maven实现,一般都由CI/CD流水线负责,因此这里也不做展开介绍了。本篇笔记我们主要介绍default
生命周期。
下面列出的是构建生命周期中比较主要的阶段(注意这个列表不是完整的):
实际上我们使用Maven命令时,大多数情况都是在调用各个生命周期阶段,下面是调用默认生命周期的几个例子。下面命令实现了清理项目并打包。我们一般用这条命令生成我们最终需要的Jar(或War)包。
mvn clean package
下面命令实现了清理项目并发布项目(上传到远程仓库)。
mvn clean deploy
每个Maven插件都会定义插件目标,插件目标实际上就是插件要实现的构建功能,一个功能对应一个插件目标。例如很常用的maven-dependency-plugin
,这个插件用于分析项目的依赖结构,它定义了一些插件目标,包括dependency:analyze
、dependency:tree
等。插件目标的写法通常是插件名作为前缀,目标名作为后缀,两者用冒号分隔。
参与构建的插件需要和Maven生命周期进行绑定,实际上上文说过Maven各个生命周期会调用默认插件,比如编译阶段调用maven-compiler-plugin
,调用的实际上就是这个插件的目标,即compiler:compile
。
我们也可以在pom.xml
中进行额外的配置,将我们需要的其他插件绑定到某个特定的生命周期,这里就不具体介绍了,针对特定的插件,通常都会有在文档中说明其用法。
下面是命令行中调用插件目标的例子。
mvn dependency:tree
实际上就是使用mvn 插件目标
的方式进行调用就可以了。