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



项目的构建通常包含数个相互独立的大块任务,可以独立执行,如生成文档,构建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. MySQL性能调优语句

    mysql>show global status; 可以列出MySQL服务器运行各种状态值 一.慢查询 mysql> show variables like '%slow%'; mysql ...

  2. 视频编解码 基本概念:GOP

    前言 产品开发要求添加视频剪辑功能,翻阅有关的文档,查到了GOP(group of pictures)这个概念. 解析 GOP说白了就是两个I帧之间的间隔.比较说GOP为120,如果是720p60的话 ...

  3. VUE - 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法

     created() {     var that=this     axios.get('http://jsonplaceholder.typicode.com/todos')     .then( ...

  4. 数十万PhpStudy用户被植入后门,快来检测你是否已沦为“肉鸡”!

    北京时间9月20日,杭州公安发布<杭州警方通报打击涉网违法犯罪暨‘净网2019’专项行动战果>一文,文章曝光了国内知名PHP调试环境程序集成包“PhpStudy软件”遭到黑客篡改并植入“后 ...

  5. linux网络编程之shutdown() 与 close()函数详解

    linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这 ...

  6. P1040 有几个PAT

    转跳点:

  7. Sublime和Python中文编码的一些问题

    Windows下的控制台中,应该是这样的逻辑: 1.如果是Unicode字符串的话,首先根据控制台编码进行转换 2.之后进行输出 所以在Windows控制台下,假设str = u'中文', 1.直接p ...

  8. 【转】R语言函数总结

    原博: R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头, ...

  9. [LeetCode] 927. Three Equal Parts 三个相等的部分

    Given an array A of 0s and 1s, divide the array into 3 non-empty parts such that all of these parts ...

  10. 【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更

    java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; imp ...