版权所有,未经授权,禁止转载



项目的构建通常包含数个相互独立的大块任务,可以独立执行,如生成文档,构建jar包等。单个任务的执行过程被称为一个构建生命周期,构建生命周期由一系列的构建阶段组成,每个阶段包含一系列的构建目标。

我们可以执行构建阶段或构建目标。阶段按顺序执行,执行一个阶段则会先执行该阶段之前的所有阶段。当执行构建阶段时,将会按顺序执行其中包含的所有构建目标。构建目标可以被分配到一个或多个构建阶段。我们还可以直接执行构建目标。

构建生命周期

如前所述,Maven构建遵循特定的生命周期来构建和部署项目。

Maven有3个内置的构建生命周期:

  • default - 编译源代码并处理打包项目相关的所有事情
  • clean - 清理构建输出,包括生成的编译类、JAR文件等
  • site - 为项目生成文档

每一个构建生命周期都是独立执行的,可以让Maven同时执行多个构建生命周期,它们之间彼此独立,就像独立执行Maven命令一样。

构建阶段

每个构建生命周期包含一系列的构建阶段,每个构建阶段又包含了一系列的构建目标。

当执行一个构建阶段时,该阶段之前的所有阶段也将被执行。例如,执行install构建阶段,首先会执行该阶段之前的所有阶段,然后执行install阶段。

默认生命周期的作用是构建代码,是最重要的构建生命周期,它不能直接执行,要通过执行它的构建阶段或目标来执行。默认生命周期包含非常多的阶段及目标,其中常用的构建阶段是:

  • validate 验证项目是正确的,所有必要信息都可用,所有依赖项都已下载。
  • compile 编译项目源代码。
  • test 使用适当的单元测试框架对编译后的源代码运行测试。
  • package 将编译后的代码打包成可发布格式,例如JAR。
  • install 将包安装到本地存储库中,以便在本地的其他项目中作为依赖项使用。
  • deploy 将最终包复制到远程存储库,以便与其他开发人员和项目共享。

通过将阶段名称传递给mvn命令,可以执行一个构建阶段。

示例:

mvn install

这个例子执行项目的install阶段,首先会执行它之前的所有构建阶段,然后再执行install阶段。

如果标准的阶段和目标不能满足项目需要,还可以创建自定义构建插件来实现额外构建功能。

构建目标

每个构建阶段都包含一系列构建目标,当运行一个阶段时,所有绑定到这个阶段的目标都将按顺序执行。

构建目标本身属于一个插件,插件是构建目标的集合,也称为MOJO (Maven Old Java Object)。可以把插件理解为一个类,构建目标是类中的方法,构建阶段是是对这些方法的顺序调用。

构建目标可以绑定到多个构建阶段,也可以不绑定,就像类的方法可以被调用,也可以不被调用。

可以使用以下命令列出绑定到特定阶段的所有目标及其所属插件:

mvn help:describe -Dcmd=PHASENAME

例如,要列出所有绑定到编译阶段的目标:

mvn help:describe -Dcmd=compile

输出:

compile' is a phase corresponding to this plugin:
org.apache.maven.plugins:maven-compiler-plugin:3.1:compile

意思是编译器插件的编译目标被绑定到编译阶段。

构建目标可以被直接执行:

mvn [plugin-name]:[goal-name]

示例:

mvn dependency:copy-dependencies

项目构建常用命令

要构建Maven项目,我们需要通过执行其中一个阶段来运行某个生命周期:

mvn deploy

这将执行整个默认生命周期。有时,我们只需执行到安装阶段为止:

mvn install

但通常我们会用以下命令:

mvn clean install

在新构建之前,首先通过运行clean生命周期来清理项目。

我们也可以只运行某个特定目标:

mvn compiler:compile

注意,如果我们试图在没有指定阶段或目标的情况下构建Maven项目,将会导致以下错误:

[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal

Maven - 构建生命周期、阶段、目标的更多相关文章

  1. 002-Apache Maven 构建生命周期

    Maven - 构建生命周期 什么是构建生命周期 构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序.这里的阶段是生命周期的一部分. 举例说明,一个典 ...

  2. Maven 构建生命周期

    构建生命周期是什么? 构建生命周期阶段的目标是执行顺序是一个良好定义的序列.这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段: 阶段 处理 描述 准备资源 资源复制 资源复制可 ...

  3. Maven学习(十三)-----Maven 构建生命周期

    Maven 构建生命周期 构建生命周期是什么? 构建生命周期阶段的目标是执行顺序是一个良好定义的序列. 这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段: 阶段 处理 描述 准 ...

  4. Java-Maven-Runoob:Maven构建生命周期

    ylbtech-Java-Maven-Runoob:Maven构建生命周期 1.返回顶部 1. Maven 构建生命周期 Maven 构建生命周期定义了一个项目构建跟发布的过程. 一个典型的 Mave ...

  5. maven 学习---Maven构建生命周期

    构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序.这里的阶段是生命周期的一部分. 举例说明,一个典型的 Maven 构建生命周期是由以下几个阶段的序 ...

  6. 【第四篇】- Maven 构建生命周期之Spring Cloud直播商城 b2b2c电子商务技术总结

    ​ ​ Maven 构建生命周期 Maven 构建生命周期定义了一个项目构建跟发布的过程. 一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的: ​ 阶段 处理 描述 验证 ...

  7. Maven构建生命周期

    以下引用官方的生命周期解释https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html: 一.构建生命 ...

  8. Maven - 深入理解maven构建生命周期和各种plugin插件

    作者:亚当-adam 来源:CSDN 原文:https://blog.csdn.net/zhaojianting/article/details/80321488 版权声明:本文为博主原创文章,转载请 ...

  9. 4、maven——构建生命周期

    什么是生命周期? 构建生命周期是一组阶段的序列(sequence of phase),每个阶段定义了目标被执行的顺序,这里的阶段就是生命周期的一部分. 一个典型的Maven生命周期由一些几个阶段的序列 ...

随机推荐

  1. SciPy 基础功能

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  2. vscode修改样式

    以修改上方滚动条宽度为例 打开开发者工具 help->toggle developer tool 或者快捷键 ctrl+shift+i 选择滚动条,找到css对应文件 鼠标移上去可以看到路径,类 ...

  3. ThinkPad重大更新!5款创意设计PC齐发2日

    导读 日前,ThinkPad巨匠P系列专业移动工作站迎来全线更新,包括ThinkPad P1隐士2019.ThinkPad P53.ThinkPad P73.ThinkPad P43s.ThinkPa ...

  4. js - 获取当前年月日

    var date = new Date(); date .getYear(); //获取当前年份(2位) date .getFullYear(); //获取完整的年份(4位) date .getMon ...

  5. Unable to execute dex:Multuple dex files define 解决方法

    困扰我两天的问题终于解决了,在网上查的方法无非有三种 一. Eclipse->Project->去掉Build Automatically->Clear ->Build Pro ...

  6. [Codeforces #608 div2]1271A Suits

    Description A new delivery of clothing has arrived today to the clothing store. This delivery consis ...

  7. P1037 在霍格沃茨找零钱

    转跳点:

  8. asp.net数据库增删改查demo

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. 无法执行 BACKUP LOG,因为当前没有数据库备份,导入数据库备份.bak文件

    右键数据库——>任务——>还原——>数据库 无法执行 BACKUP LOG,因为当前没有数据库备份 结尾日志的问题 还原选择中去掉结尾日志就可以了

  10. Dockerfile详解,以及构建自定义镜像

    Dockerfile使用 前面的操作我们一直下载下载官方已经构建好的镜像,直接下载后就可以run,如果我们想要在镜像中添加自己的应用,比如在tomcat中添加自己的app,构建一个自定义的镜像,那么我 ...