Maven的鸟瞰图

我们每天要做的一件事是使用Maven通过发出诸如mvn install之类的构建命令来构建我们的项目。 然后,Maven查看我们项目的配置文件(亲切地称为POM),神奇地找出要执行的操作,并且,嘿,您的构建已完成。 我想我们经常这样做,以至于我们从来没有考虑过幕后发生的事情,而且在某些情况下甚至从未了解过发生了什么。 该博客简要介绍了Maven构建生命周期,并揭示了在您发出诸如mvn clean install之类的命令时会发生什么。

如果您曾经阅读过Maven文档,那么您将了解到Maven都是关于面向对象的分层构建结构。 在本文中,有三个主要伪像:构建生命周期,构建阶段和目标,因此,一个很好的起点是解释这些术语之间的关系。 看下面的UML图:

直接进入,您会看到Maven HAS 1具有一个或多个构建生命周期,每个生命周期具有一个或多个构建阶段,它们以给定的顺序执行。 同样,每个构建阶段都有一个或多个构建目标,这些目标也将按照给定的顺序执行。

定义构建阶段的一个好方法是举一个例子。 Maven文档列出了所谓的默认生命周期,以下是其构建阶段:

  1. 验证 –验证项目是否正确并且所有必要的信息均可用
  2. 编译 –编译项目的源代码
  3. 测试 –使用合适的单元测试框架测试已编译的源代码。 这些测试不应要求将代码打包或部署
  4. 打包 –接受编译后的代码,并将其打包为可分发的格式,例如JAR。
  5. 集成测试 –如有必要,将程序包处理并部署到可以运行集成测试的环境中
  6. 验证 –运行任何检查以验证包装是否有效并符合质量标准
  7. install –将软件包安装到本地存储库中,以作为本地其他项目中的依赖项
  8. 部署 –在集成或发布环境中完成,将最终程序包复制到远程存储库,以便与其他开发人员和项目共享。

因此,我们可以将构建阶段定义为照顾构建生命周期的一部分的阶段,例如编译或测试项目。

您可以通过在命令行上指定构建阶段来告诉Maven构建项目。 例如:

mvn install

…表示“在默认的构建生命周期中执行直到安装阶段的所有构建阶段,包括安装阶段”。
…发行了一张

mvn clean install

…表示“将清洁生命周期的所有构建阶段进行到(包括) 清洁构建阶段,然后在默认构建生命周期中执行直到安装阶段的所有构建阶段,包括安装阶段”。

由此您可以推断出

mvn test

…命令将执行验证构建阶段,并执行其目标; 然后是编译阶段,执行其目标,最后是测试阶段,执行其目标。

那么,目标是什么? 在Maven领域中,目标可以定义为单个任务或工作,实际上可以对构建项目起到实际作用。 如果将Maven与您可能工作的公司进行比较,则生命周期将是董事会,构建阶段是中层管理人员,是完成工作的工人的目标。

大多数构建阶段都附带有默认目标,例如,您可能已经猜到, 编译器构建阶段绑定到了compile:compile目标,同样, 安装构建阶段也绑定到install:install目标。

您还可以使用POM文件中的<plugin>元素将您自己的目标绑定到阶段,这可以用于覆盖目标的默认行为或添加新目标和新行为。

关于目标 s最后要注意的一点是,它们通常与POM的包装类型相关联。 例如,这是有道理的,例如:editor:compile目标与jarejb打包相关联,但就POMwarear包而言,这毫无意义。

阅读本文时,您可能已经了解到,按照惯例,目标名称包含一个冒号,而构建阶段的名称则不包含。 这使您可以在Maven命令行上指定目标,而不会将它们与构建阶段混淆。 例如:

mvn compiler:compile

…将执行compile:compile目标,该目标处于默认构建生命周期的编译器构建阶段。 而且,一点点混在一起…

mvn install tomcat:redeploy

…将执行所有构建阶段,直到安装为止,包括在默认的构建生命周期中进行安装 ,然后执行Tomcat Mojo中的tomcat:redeploy目标。

那就是一英里高的鸟瞰Maven。

1 字的UML感。

参考: Captain Debug's Blog博客上的JCG合作伙伴 Roger Hughes 的Maven鸟瞰图 。


翻译自: https://www.javacodegeeks.com/2012/06/birdss-eye-view-of-maven.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node源码详解(五)

本作品采用知识共享署名 4.0 国际许可协议进行许可。转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource5 本博客同步在https://cnodejs.org/topic/56ed6735b705742136388fa6 本博客同步在http://www.cnblogs.com/papertree/p/5295344.html 在上一篇博客&#xff…

51Nod - 1381 硬币游戏

51Nod - 1381 硬币游戏 有一个简单但是很有趣的游戏。在这个游戏中有一个硬币还有一张桌子&#xff0c;这张桌子上有很多平行线&#xff08;如下图所示&#xff09;。两条相邻平行线之间的距离是1&#xff0c;硬币的半径是R&#xff0c;然后我们来抛硬币到桌子上&#xff0c;抛…

javascript 相关小的知识点集合

本文主要是列出一些javascript 相关的&#xff0c;不限于javascript的&#xff0c;容易记错或者遗忘的小知识&#xff0c;小技巧。 1、javascript中的false 在 JavaScript&#xff0c;常见的 false 值&#xff1a; 0, 0, 0, -0, false, ,null,undefined,NaN 要注意空数组([])和…

AOS – 另外一个独特的页面滚动动画库(CSS3)

AOS 是一个用于在页面滚动的时候呈现元素动画的工具库&#xff0c;你可能会觉得它和 WOWJS 一样&#xff0c;的确他们效果是类似的。但是AOS是 CSS3 动画驱动的库&#xff0c;当你滚动页面的时候能让元素动起来&#xff0c;当页面滚回顶部的时候&#xff0c;元素能够回到前一个…

JavaFX 2.0 Hello World

在讨论示例本身之前&#xff0c;我想向您展示如何在NetBeans中创建JavaFX应用程序。 &#xff08;如果尚未安装JavaFX和NetBeans&#xff0c;请参阅我以前的文章《 安装JavaFX 2.0和NetBeans 7.7.1》 &#xff09;单击“文件”菜单中的“新建项目”以打开项目向导。 然后选择“…

java 线程强制停止线程_java多线程之停止线程

在多线程开发中停止线程是非常重要的技术点。停止线程在Java语言中并不像break语句那样干脆。须要一些技巧性的处理。一、 异常法採用异常法来停止一个线程。首先我们须要了解一下两个方法的使用方法&#xff1a;1、interrupt()方法public class MyThread extends Thread{Over…

双系统Ubuntu分区扩容过程记录

本人电脑上安装了Win10 Ubuntu 12.04双系统。前段时间因为在Ubuntu上做项目要安装一个比较大的软件&#xff0c;导致Ubuntu根分区的空间不够了。于是&#xff0c;从硬盘又分出来一部分空间&#xff0c;分给Ubuntu。于是有了这篇Ubuntu扩容过程记录&#xff0c;也可以当作是一篇…

安装JAVA8要登录_JDK8的安装及环境配置

原文链接:https://www.cnblogs.com/chenxj/p/10137221.html1、下载JDK&#xff1b;b、或百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1S14y4_3eN9G6oOVfhmbe_w提取码&#xff1a;0cf62、双击安装程序&#xff0c;点击下一步安装目录若不修改&#xff0c;可直…

早期访问中带有NetBeans的Oracle公共云Java服务

谁期望发生这种情况&#xff1a;Oracle正在开发公共云产品&#xff0c;并且即将开始正式启动的迹象已经出现。 在正式宣布之后将近一年&#xff0c;我被邀请加入所谓的“抢先体验”计划&#xff0c;以试驾新服务并提供反馈。 多亏负责产品的经理Reza Shafii &#xff0c;我才可…

App Engine中的Google Services身份验证,第2部分

在本教程的第一部分中&#xff0c; 我描述了如何使用OAuth进行Google API服务的访问/身份验证。 不幸的是&#xff0c;正如我稍后发现的那样&#xff0c;我使用的方法是OAuth 1.0&#xff0c;显然现在Google正式弃用了OAuth 1.0&#xff0c;改用OAuth 2.0版本。 显然&#xff0…

[51nod1297]管理二叉树

一个初始为空的二叉搜索树T&#xff0c;以及1到N的一个排列P: {a1, a2, ..., aN}。我们向这个二叉搜索树T添加这些数&#xff0c;从a1开始, 接下来是 a2, ...&#xff0c; 以aN结束。在每一个添加操作后&#xff0c;输出T上每对节点之间的距离之和。例如&#xff1a;4 7 3 1 8 …

Java Swing中的聊天气泡

本文将向您解释“如何在Java swing应用程序中绘制聊天气泡&#xff1f;” 聊天气泡与呼出气泡或思想气泡相同。 今天&#xff0c;大多数聊天应用程序都以这种格式显示转换&#xff0c;因此本文将帮助您在用Java swing创建的桌面应用程序中进行相同的操作。 以下课程用于绘制第一…

java内存模型按照线程隔离性_深入理解Java多线程与并发框(第③篇)——Java内存模型与原子性、可见性、有序性...

一、Java内存模型Java Memory Modle&#xff0c;简称 JMM&#xff0c;中文名称 Java内存模型&#xff0c;它是一个抽象的概念&#xff0c;用来描述或者规范访问内存变量的方式。因为各中计算机的操作系统和硬件不同&#xff0c;方式机制也可能不同&#xff0c;Java内存模型用于…

ZK实际应用:样式和布局

在之前的ZK in Action帖子中&#xff0c;我们使用ZK MVVM实现了CRUD功能 。 我们还快速浏览了一些样式代码&#xff0c;可能需要更多的解释。 在本文中&#xff0c;我们将讨论如何在ZK小部件上附加新CSS样式规则&#xff0c;以及如何覆盖现有样式。 我们还将介绍ZK中UI布局的一…

Tornado(一)

Tornado 特点 Tornado是一个用Python写的相对简单的、不设障碍的Web服务器架构&#xff0c;用以处理上万的同时的连接口&#xff0c;让实时的Web服务通畅起来。虽然跟现在的一些用Python写的Web架构相似&#xff0c;比如Django&#xff0c;但Tornado更注重速度&#xff0c;能够…

Android下Opengl ES实现单屏幕双眼显示

http://blog.csdn.net/u011371324/article/details/68946779 默认情况下&#xff0c;Opengl ES使用系统提供的帧缓冲区作为绘图表面&#xff0c;一般情况下&#xff0c;如果只在屏幕的表面绘图的话&#xff0c;系统提供的默认帧缓冲区很高效&#xff0c;但是很多应用程序需要渲…

Oracle Service Bus –线程阻塞案例研究

本案例研究描述了在AIX 6.1和IBM Java VM 1.6上运行的Oracle Service Bus 11g遇到的线程阻塞问题的完整根本原因分析过程。 本文也是您提高线程转储分析技能的绝佳机会&#xff0c;我强烈建议您学习并正确理解以下分析方法。 与过早的中间件&#xff08;Weblogic&#xff09;重…

java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别

目录重载与重写的概念重载与重写的区别重载与重写的总结构造器是否能被重写override为什么函数不能根据返回类型来区分重载重载与重写的概念重载&#xff1a;同样一个方法可以根据输入参数列表的不同&#xff0c;做出不同的处理。普通方法和构造器方法都能够重载。方法重载&…

二维数组、多维数组

二维数组&#xff1a; 定义二维数组 int[,] myArray new int[几个一维数组,数组中的个数]; 数组可以具有多个维度。例如&#xff0c;下列声明创建一个四行两列的二维数组(可以理解为4个1维数组&#xff0c;数组中包含2个元素)&#xff1a; int[,] myArray new int[4,2]; int[…

一张大图片有多个小图片

这个页面也是我看到别人的写的&#xff0c;感觉不错&#xff0c;就自己留下了为了以后自己可以容易找到&#xff0c;也希望可以方便到别人。 写这个页面 需要注意的是&#xff1a; 1.写每一个小图片的位置时候&#xff0c;要用id,这样等级就高了&#xff0c;不然不起作用。 2.因…