如果您曾经阅读过Maven文档,那么您将了解到Maven都是关于面向对象的分层构建结构。 在本文中,有三个主要伪像:构建生命周期,构建阶段和目标,因此,一个很好的起点是解释这些术语之间的关系。 看下面的UML图:
直接进入,您会看到Maven HAS 1具有一个或多个构建生命周期,每个生命周期具有一个或多个构建阶段,它们以给定的顺序执行。 同样,每个构建阶段都有一个或多个构建目标,这些目标也将按照给定的顺序执行。
定义构建阶段的一个好方法是举一个例子。 Maven文档列出了所谓的默认生命周期,以下是其构建阶段:
- 验证 –验证项目是否正确并且所有必要的信息均可用
- 编译 –编译项目的源代码
- 测试 –使用合适的单元测试框架测试已编译的源代码。 这些测试不应要求将代码打包或部署
- 打包 –接受编译后的代码,并将其打包为可分发的格式,例如JAR。
- 集成测试 –如有必要,将程序包处理并部署到可以运行集成测试的环境中
- 验证 –运行任何检查以验证包装是否有效并符合质量标准
- install –将软件包安装到本地存储库中,以作为本地其他项目中的依赖项
- 部署 –在集成或发布环境中完成,将最终程序包复制到远程存储库,以便与其他开发人员和项目共享。
因此,我们可以将构建阶段定义为照顾构建生命周期的一部分的阶段,例如编译或测试项目。
您可以通过在命令行上指定构建阶段来告诉Maven构建项目。 例如:
mvn install
…表示“在默认的构建生命周期中执行直到安装阶段的所有构建阶段,包括安装阶段”。
…发行了一张
mvn clean install
…表示“将清洁生命周期的所有构建阶段进行到(包括) 清洁构建阶段,然后在默认构建生命周期中执行直到安装阶段的所有构建阶段,包括安装阶段”。
由此您可以推断出
mvn test
…命令将执行验证构建阶段,并执行其目标; 然后是编译阶段,执行其目标,最后是测试阶段,执行其目标。
那么,目标是什么? 在Maven领域中,目标可以定义为单个任务或工作,实际上可以对构建项目起到实际作用。 如果将Maven与您可能工作的公司进行比较,则生命周期将是董事会,构建阶段是中层管理人员,是完成工作的工人的目标。
大多数构建阶段都附带有默认目标,例如,您可能已经猜到, 编译器构建阶段绑定到了compile:compile目标,同样, 安装构建阶段也绑定到install:install目标。
您还可以使用POM文件中的<plugin>元素将您自己的目标绑定到阶段,这可以用于覆盖目标的默认行为或添加新目标和新行为。
关于目标 s最后要注意的一点是,它们通常与POM的包装类型相关联。 例如,这是有道理的,例如:editor:compile目标与jar和ejb打包相关联,但就POM , war或ear包而言,这毫无意义。
阅读本文时,您可能已经了解到,按照惯例,目标名称包含一个冒号,而构建阶段的名称则不包含。 这使您可以在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