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

maven 父maven_Maven的鸟瞰图相关推荐

  1. maven 父maven_Maven神秘化

    maven 父maven 由于我的Android开发的背景下,我比较习惯到Gradle ,而不是Maven的 . 尽管我知道Gradle基于Maven,但我从未调查过幕后发生的事情. 在过去的一周中, ...

  2. maven 父maven_Maven的春天

    maven 父maven 1.概述 本教程将讨论如何使用Maven设置Spring,并介绍使用Spring依赖项的特定用例. 最新的Spring版本可以在Maven Central中找到. 2.基本的 ...

  3. maven 父maven_Maven不会吮吸。 。 。 但是Maven文件会

    maven 父maven 我不会参加整个Maven辩论,但可以说我是所有最佳实践的坚定支持者,对我而言,Maven是最佳实践的体现. 我的意思是说,Maven是围绕特定的最佳实践构建方法构建的. 注意 ...

  4. Maven 父pom中dependencyManagement版本优先级高于传递依赖版本

    当使用了传递依赖,也就是使用了没有显示声明的依赖时,如果继承的<dependencyManagement/>中声明了使用的传递依赖的版本,那么最终使用的依赖是<dependencyM ...

  5. Maven 父文件的依赖 子文件不能接收_maven报错:Non-resolvable parent POM for com...

    今天碰到了以下问题,这个说一下解决方案 下面是我遇到问题查找的相应的解决方法,发现并未解决,但以下也是一个可能的解决方案. 在做淘淘商城的项目一开始搭建后台maven工程的时候,做Taotao-com ...

  6. Maven父工程(统一管理依赖)

      之前一段时间,我和在其他公司工作的同行朋友聊天时无意间聊到项目依赖问题,发现很多公司(包括我们公司)都是有自己一个统一的父工程,而这个工程没有任何的逻辑代码,说起来只有一个pom.xml文件,而这 ...

  7. 创建maven父工程统一管理版本号

    一.建立一个maven工程 pom类型 统一管理依赖以及版本号 子工程不会使用所有的定义的依赖 子工程使用依赖时无需指定版本号 其pom.xml: <?xml version="1.0 ...

  8. 去除maven父依赖_如何在Maven中从父项目中排除依赖项?

    我遇到了和你一样的问题. 在我的项目中,让我们称父pom为parent.pom. parent定义了log4j,slf4j是这样的: org.slf4j slf4j-api ${slf4j-api.v ...

  9. maven父pom和子pom的版本号一并批量修改

    1 设置新的版本号 mvn versions:set -DnewVersion=1.7-SNAPSHOT 2 撤销设置 mvn versions:revert 3 提交设置 mvn versions: ...

最新文章

  1. Vue父组件调用子组件的方法并传参的两种方式(用$refs.refName.functionName、window.function)
  2. 2016目录怎么生成_0基础学标书编写,目录可以这样生成,不用再手动排页码了...
  3. DGL教程【三】构建自己的GNN模块
  4. CSS 单行溢出文本显示省略号...的方法(兼容IE FF)(转)
  5. PHP简单操作Excel
  6. python修改html表格,使用styles和css更改pandas dataframe html表python中...
  7. 选择Java加密算法第2部分–单密钥对称加密
  8. 阿里程序员常用的 15 个高效工具,大部分已开源!
  9. 系统总线频率和外频有何区别?
  10. C++中的两个知识点
  11. HTML实时预览-LiveReload完整使用方法
  12. 查询数据库中表的空间使用情况
  13. 2019 送给每位读者的几点拙见
  14. PAT L1 049 天梯赛座位分配
  15. 机器学习-数据归一化方法(Normalization Method)
  16. 本草纲目pdf彩图版下载_本草纲目pdf下载|本草纲目彩色插图版PDF完整版_ - 极光下载站...
  17. 如何升级到 Ubuntu 20.04
  18. Python爬虫实战四之抓取淘宝MM照片
  19. 火焰纹章核心功能的实现
  20. python opencv入门 鼠标绘图(4)

热门文章

  1. Oracle入门(七A)之表空间配额(quota)
  2. JAVA元注解@interface详解(@Target,@Documented,@Retention,@Inherited)
  3. JavaFX之TableView的TableRow
  4. JavaScript常用单词整理总结
  5. 蓝桥杯JAVA省赛2013-----B------5(有理数类)
  6. java语言中的访问权限控制符有哪些,18.Java的访问控制符
  7. df、du和fdisk命令的区别
  8. spring react_使用Spring WebFlux构建React性REST API –第3部分
  9. selenium 4_Selenium4 Alpha –期望什么?
  10. cuba 平台_CUBA 7的新功能