[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Getting Started with Maven 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-cli) @ gswm ---
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:\apress\gswm-book\chapter5\gswm\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.197s
[INFO] Finished at: Mon Oct 13 22:11:42 MDT 2014
[INFO] Final Memory: 7M/18M
[INFO] ------------------------------------------------------------------------
Maven中的目标包装在插件中,这些插件本质上是一个或多个目标的集合。在清单5-1中,编译器是提供目标编译的插件。清单5-2介绍了一个名为clean的漂亮的目标。如前所述,目标文件夹保存Maven生成的临时文件和工件。有时候目标文件夹变得庞大,或者某些已经缓存的文件需要从文件夹中清除。干净的目标完全实现了,因为它试图删除目标文件夹及其所有内容。
C:\apress\gswm-book\chapter5\gswm>mvn clean:clean
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Getting Started with Maven 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-cli) @ gswm ---
[INFO] Deleting C:\apress\gswm-book\chapter5\gswm\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.233s
[INFO] Finished at: Mon Oct 13 22:14:49 MDT 2014
[INFO] Final Memory: 3M/15M
[INFO] ------------------------------------------------------------------------
4.0.0
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.6
1.6
注意pom.xml中的
生命周期和阶段
Maven在构建,测试和分发工件时遵循良好定义的构建生命周期。生命周期构成以相同顺序执行的一系列阶段或步骤,与产生的伪像无关。 Maven将生命周期中的步骤称为阶段。 Maven有以下三个内置的生命周期:
默认值:此生命周期处理Maven项目的编译,打包和部署。
清除:此生命周期处理从目标目录删除临时文件和生成的工件。
站点:这个生命周期处理文档和站点生成的生成。
注意现在,您已经知道清洁生命周期,您只需通过使用命令mvn clean运行clean阶段就可以清理目标文件夹。
为了更好地理解构建生命周期及其阶段,让我们来看看与默认生命周期相关的一些阶段:
验证:运行检查以确保项目正确,并且所有依赖项都已下载并可用。
编译:编译源代码。
测试:使用框架运行单元测试。此步骤不需要打包应用程序。
包:将编译的代码汇编为可分发格式,例如JAR或WAR。
安装:将打包的归档安装到本地存储库中。该归档现在可供在该机器上运行的任何项目使用。
部署:将构建的存档推送到远程存储库,供其他团队和团队成员使用。
因为默认生命周期清楚地定义阶段的顺序,所以可以通过运行命令mvn package生成工件。 Maven将在所请求的阶段之前自动执行所有阶段。在提供的示例中,Maven将在运行包阶段之前运行阶段,如编译和测试。这意味着开发人员和配置管理器只需要学习和使用少数命令。
在每个阶段需要执行许多任务。为了实现这一点,每个阶段都与一个或多个目标相关联。阶段简单地将这些任务委派给它的相关目标。图5-1显示了生命周期,阶段,目标和插件之间的关联。
图5-1。生命周期,阶段,目标和插件之间的关联
pom.xml文件中的
跳过测试
如前所述,当运行包阶段时,测试阶段也会运行,所有单元测试都会执行。如果测试阶段有任何故障,构建将失败。这是所需的行为。但是,有时候,例如,当处理遗留项目时,您希望跳过运行测试,以便可以成功构建项目。你可以使用maven.test.skip属性来实现。以下是使用此属性的示例:
mvn package -Dmaven.test.skip = true
插件开发
开发Maven的插件非常简单。本节介绍如何开发一个例子HelloPlugin,它将给你一个插件开发的味道。
如前所述,插件只是目标的集合。因此,当我们谈论插件开发时,我们基本上是在谈论开发目标。在Java中,这些目标使用MOJO实现,它代表Maven旧Java对象,类似于Java的普通旧Java对象(POJO)。
让我们通过创建一个名为gswm-plugin的Maven Java项目来开始这个插件开发,如图5-2所示。我们正在C:\ apress \ gswm-book \ chapter5文件夹中启动gswm-plugin项目下创建此项目。
图5-2。 Maven项目的插件开发
注意在本章中,我们手动创建插件项目。 Maven提供了一个mavan-archetype-mojo,它会启动你的插件开发。我们将在第6章中学习Maven原型。
pom.xml文件的内容如清单5-4所示。请注意,打包类型是maven-plugin。我们添加了maven-plugin-api依赖项,因为它是插件开发所必需的。
列表5-4。 pom.xml具有插件api依赖性
4.0.0
com.apress.plugins
gswm-plugin
1.0.0
maven-plugin
Simple Hello Plugin
org.apache.maven
maven-plugin-api
3.2.3
列表5-5。 HelloMojo Java类
package com.apress.plugins;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
/** * * @goal hello */public class HelloMojo extends AbstractMojo
{ public void execute() throws MojoExecutionException, MojoFailureException
{ getLog().info("Hello Maven Plugin");
}
}
此过程的最后一步是在Maven存储库中安装插件。在目录的根目录下运行mvn install命令,你应该得到如代码清单5-6所示的输出。
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Simple Hello Plugin 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-plugin-plugin:3.2:descriptor (default-descriptor) @ gswm-plugin ---
[INFO] Applying mojo extractor for language: java-annotations
[INFO] Mojo extractor for language: java-annotations found 0 mojo descriptors.
[INFO] Applying mojo extractor for language: java
[INFO] Mojo extractor for language: java found 1 mojo descriptors.
[INFO] Applying mojo extractor for language: bsh
[INFO] Mojo extractor for language: bsh found 0 mojo descriptors.
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ gswm-plugin ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\apress\gswm-book\chapter5\gswm-plugin\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ gswm-plugin -----------------------------------------------
[INFO] Building jar: C:\apress\gswm-book\chapter5\gswm-plugin\target\gswm-plugin-1.0.0.jar
[INFO]
[INFO] --- maven-plugin-plugin:3.2:addPluginArtifactMetadata (default-addPluginArtifactMetadata) @ gswm-plugin ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ gswm-plugin ---
[INFO] Installing C:\apress\gswm-book\chapter5\gswm-plugin\target\gswm-plugin-1.0.0.jar to C:\Users\<>\.m2\repository\com\apress\plugins\gswm-plugin\1.0.0\gswm-plugin-1.0.0.jar
[INFO] Installing C:\apress\gswm-book\chapter5\gswm-plugin\pom.xml to C:\Users\<>\.m2\repository\com\apress\plugins\gswm-plugin\1.0.0\gswm-plugin-1.0.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.788s
[INFO] Finished at: Mon Oct 13 22:29:55 MDT 2014
[INFO] Final Memory: 13M/32M
[INFO] ------------------------------------------------------------------------
C:\apress\gswm-book\chapter5\gswm-plugin>mvn com.apress.plugins:gswm-plugin:hello
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------------------------------------------
[INFO] Building Simple Hello Plugin 1.0.0
[INFO] ----------------------------------------------------------
[INFO] --- gswm-plugin:1.0.0:hello (default-cli) @ gswm-plugin ---
[INFO] Hello Maven Plugin
[INFO] ----------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ----------------------------------------------------------
[INFO] Total time: 0.583s
[INFO] Finished at: Mon Oct 13 22:32:55 MDT 2014
[INFO] Final Memory: 4M/15M
[INFO] ----------------------------------------------------------
Maven使用基于插件的架构,使其功能可以轻松扩展。 每个插件是一个或多个目标的集合,可用于执行任务,如编译源代码或运行测试。 Maven将目标绑定到阶段。 相通常作为构建生命周期的一部分以序列执行。 您还学习了创建插件的基础知识。
在下一章中,您将介绍原型并了解多模块项目。