maven 父maven_Maven的鸟瞰图

maven 父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

maven 父maven

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

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

相关文章

mysql断网_断网的情况上如何访问本机的mysql

断网的情况下怎么访问本机的mysql我发现把网络断掉后mysql就不能访问了。使用phpmyadmin(http://localhost/phpmyadmin/index.php?)访问&#xff0c;输入用户名和密码后点击登陆&#xff0c;就会出现“#2002 Cannot log in to the MySQL server”错误。使用命令行登陆&#xf…

Py IO model

事件驱动模型 上节的问题&#xff1a; 协程&#xff1a;遇到IO操作就切换。 但什么时候切回去呢&#xff1f;怎么确定IO操作完了&#xff1f; 很多程序员可能会考虑使用“线程池”或“连接池”。“线程池”旨在减少创建和销毁线程的频率&#xff0c;其维持一定合理数量的线程&a…

Fiddler 扒取微信小程序的图片

安装 Fiddler http://www.downza.cn/soft/234727.html Tools-options配置 如果无法抓取到PC微信小程序 解决办法&#xff1a; 打开小程序&#xff0c;任务管理器找到小程序所在位置&#xff0c;删除文件内容 一般路径为\Tencent\WeChat\XPlugin\Plugins\WMPFRuntime 删除…

JLBH – Java延迟基准线束介绍

在这篇文章中&#xff1a; 什么是JLBH 我们为什么写JLBH JMH和JLBH之间的区别 快速入门指南 什么是JLBH&#xff1f; JLBH是可用于测量Java程序中的延迟的工具。 它具有以下功能&#xff1a; 旨在运行比微型基准测试更大的代码。 适用于使用异步活动&#xff08;如生产者…

mysql 5.7 mts_mysql5.7 中启用MTS后error log中大量Note日志分析

mysql5.7,启用基于logical_clock的多线程复制,发现error日志增长很快&#xff0c;查看日志发现大量关于多线程复制的Note级别日志。1234567891011121314152018-07-03T03:22:01.63837108:00 8941 [Note] Multi-threaded slave statistics for channel : seconds elapsed 298; e…

Nginx 怎么给一台服务器,配置两个域名?详细的解说+截图教程

一、 环境、条件准备 一台云服务器&#xff08;我的是腾讯的centos7&#xff09; 至少两个域名。&#xff08;我的是simuhunluo.xyz和simuhunluo.top。这两个域名之间没有任何关系&#xff0c;我是在阿里用两个账号分别注册的。&#xff09; 云服务器上面已经搭建了ngin…

extjs6 mvvm_ZK 6中的MVVM初探

extjs6 mvvmMVVM与MVC 在上一篇文章中&#xff0c;我们已经看到Ajax框架ZK如何采用CSS选择器启发的Controller来在View中连接UI组件并监听它们的事件。 在此ZK MVC模式下&#xff0c; View中的UI组件无需绑定到任何Controller方法或数据对象。 使用选择器模式作为将View状态和事…

多线程 调用 axis 报错_java笔记录(三、多线程)

1、进程和线程&#xff1a;进程&#xff1a;正在进行的程序。每一个进程执行都有一个执行顺序&#xff0c;该顺序是一个执行路径&#xff0c;或者叫一个控制单元。线程&#xff1a;进程内部的一条执行路径或者一个控制单元。两者的区别&#xff1a;一个进程至少有一个线程进程在…

使用PropertyPlaceholderConfigurer读取属性文件

1.简介 通常&#xff0c;当我们考虑将多个应用程序部署到生产环境之前在其中部署服务器时&#xff0c;可以在外部属性文件中配置特定于环境的参数 。 它可能是数据库详细信息&#xff0c;对于测试服务器和生产服务器而言&#xff0c;这是不同的。 因此最好选择将数据库配置文件…

第二天:Swift手势操控弹性按钮

参考链接:https://www.jianshu.com/p/f080ede0f3a8 1 import UIKit2 3 fileprivate let buttonH: CGFloat 2004 5 class ViewController: UIViewController, UIGestureRecognizerDelegate {6 7 IBOutlet weak var segmentControl: UISegmentedControl!8 var randomBtn…

ionic2 安装与cordova打包

1.安装&#xff1a; cnpm install -g cordova ionic ionic start name cd name cnpm install 2、环境配置&#xff1a; http://www.cnblogs.com/changyaoself/p/6544082.html 这里是具体配置。 测试环境&#xff1a; cordova platform list 如下才可以&#xff1a; 3、添加…

mysql vacuum_PostgreSQL DBA快速入门(四) - 体系架构

PostgreSQL在开源关系型数据库市场是最先进的数据库。他的第一个版本在1989年发布&#xff0c;从那时开始&#xff0c;他得到了很多扩展。根据db-enginers上的排名情况&#xff0c;PostgreSQL目前在数据库领域排名第四。 本篇博客&#xff0c;我们来讨论一下PostgreSQL的内部架…

总结mysql的基础语法_mysql 基础sql语法总结 (二)DML

二、DML(增、删、改)1)插入数据第一种写法&#xff1a;INSERT INTO 表名 (列名1&#xff0c;列名2&#xff0c;&#xff0c;......)VALUES(列值1&#xff0c;列值2&#xff0c;......)第二种写法&#xff1a;INSERT INTO 表名 VALUES(列值1&#xff0c;列值2&#xff0c;......…

提高团队协作效率

提高团队协作效率 分工合理&#xff0c;责任明确 团队是由个人组成的&#xff0c;团队中的个人往往经历不同、背景不同、性格有差异、水平有高低。在团队形成后、正式开工前&#xff0c;首先应该进行合理分工&#xff0c;要结合每个 人的特点和爱好&#xff0c;充分发挥出每个人…

Java中Array和ArrayList之间的9个区别

array和ArrayList都是Java中两个重要的数据结构&#xff0c;在Java程序中经常使用。 即使ArrayList在内部由数组支持&#xff0c;了解Java中的数组和ArrayList之间的差异对于成为一名优秀的Java开发人员也至关重要。 如果您知道相似点和不同点&#xff0c;则可以明智地决定何时…

vue 在已有的购买列表中(数据库返回的数据)修改商品数量

连续加班一个月 连续通宵三天 到最后还是少了一个功能 心碎 简介&#xff1a;一个生成好的商品列表&#xff08;数据库返回的数据&#xff09; 首先拿到我们需要渲染的数组 在data中定义 我是在测试的时候 直接写了两条数据 下面开始点击删除 点击添加是一样的代码 只不过加号…

python饼状图教程_Python数据可视化:饼状图的实例讲解

使用python实现论文里面的饼状图&#xff1a;原图&#xff1a;python代码实现&#xff1a;# # 饼状图# plot.figure(figsize(8,8))labels [uCanteen, uSupermarket, uDorm, uOthers]sizes [73, 21, 4, 2]colors [red, yellow, blue, green]explode (0.05, 0, 0, 0)patches,…

小看--单例设计模式

&#xff08;一&#xff09;单例设计描述 只要了解过设计模式的同学都会知道&#xff1a;单例设计模式&#xff0c;大家都知道单例设计模式是一种创建行的设计模式。既然是创建型&#xff0c;那么先来讲讲&#xff0c;对象的创建的过程吧。 --静态成员&#xff1a;静态成员在程…

selenium原理python_从python角度解析selenium原理

1、selenium工作流程2、selenium工作原理(1)客户端和服务端之间实际是通过http协议进行通信&#xff0c;服务端的接口文档可参考&#xff1a;https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelement(2)客户端按照服务端接口要求传入请求方式、…

Jmeter(二)Jmeter目录介绍

看过许多有关Jmeter的博客&#xff0c;算得上的收获颇丰&#xff1b;不过最牛逼的博客还是“官方文档”&#xff0c;官方文档是ApacheJmeter自己对自己产品的说明&#xff0c;论起对自己产品的理解程度&#xff0c;那肯定是自己嘛。。。因此推荐大家从Jmeter的官方文档开始学习…