`

常用Maven插件介绍(下)

阅读更多

我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。

用户可以通过两种方式调用Maven插件目标。第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已,例如Maven默认将maven-compiler-plugin的compile目标与compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。第二种方式是直接在命令行指定要执行的插件目标,例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。

认识上述Maven插件的基本概念能帮助你理解Maven的工作机制,不过要想更高效率地使用Maven,了解一些常用的插件还是很有必要的,这可以帮助你避免一不小心重新发明轮子。多年来Maven社区积累了大量的经验,并随之形成了一个成熟的插件生态圈。Maven官方有两个插件列表,第一个列表的GroupId为org.apache.maven.plugins,这里的插件最为成熟,具体地址为:http://maven.apache.org/plugins/index.html。第二个列表的GroupId为org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:http://mojo.codehaus.org/plugins.html

接下来笔者根据自己的经验介绍一些最常用的Maven插件,在不同的环境下它们各自都有其出色的表现,熟练地使用它们能让你的日常构建工作事半功倍。本文为下半部分。(上半部分内容参见Maven实战(七)——常用Maven插件介绍(上) 

maven-resources-plugin

http://maven.apache.org/plugins/maven-resources-plugin/

为了使项目结构更为清晰,Maven区别对待Java代码文件和资源文件,maven-compiler-plugin用来编译Java代码,maven-resources-plugin则用来处理资源文件。默认的主资源文件目录是src/main/resources,很多用户会需要添加额外的资源文件目录,这个时候就可以通过配置maven-resources-plugin来实现。此外,资源文件过滤也是Maven的一大特性,你可以在资源文件中使用${propertyName}形式的Maven属性,然后配置maven-resources-plugin开启对资源文件的过滤,之后就可以针对不同环境通过命令行或者Profile传入属性的值,以实现更为灵活的构建。

maven-surefire-plugin

http://maven.apache.org/plugins/maven-surefire-plugin/

可能是由于历史的原因,Maven 2/3中用于执行测试的插件不是maven-test-plugin,而是maven-surefire-plugin。其实大部分时间内,只要你的测试类遵循通用的命令约定(以Test结尾、以TestCase结尾、或者以Test开头),就几乎不用知晓该插件的存在。然而在当你想要跳过测试、排除某些测试类、或者使用一些TestNG特性的时候,了解maven-surefire-plugin的一些配置选项就很有用了。例如 mvn test -Dtest=FooTest 这样一条命令的效果是仅运行FooTest测试类,这是通过控制maven-surefire-plugin的test参数实现的。

build-helper-maven-plugin

http://mojo.codehaus.org/build-helper-maven-plugin/

Maven默认只允许指定一个主Java代码目录和一个测试Java代码目录,虽然这其实是个应当尽量遵守的约定,但偶尔你还是会希望能够指定多个源码目录(例如为了应对遗留项目),build-helper-maven-plugin的add-source目标就是服务于这个目的,通常它被绑定到默认生命周期的generate-sources阶段以添加额外的源码目录。需要强调的是,这种做法还是不推荐的,因为它破坏了 Maven的约定,而且可能会遇到其他严格遵守约定的插件工具无法正确识别额外的源码目录。

build-helper-maven-plugin的另一个非常有用的目标是attach-artifact,使用该目标你可以以classifier的形式选取部分项目文件生成附属构件,并同时install到本地仓库,也可以deploy到远程仓库。

exec-maven-plugin

http://mojo.codehaus.org/exec-maven-plugin/

exec-maven-plugin很好理解,顾名思义,它能让你运行任何本地的系统程序,在某些特定情况下,运行一个Maven外部的程序可能就是最简单的问题解决方案,这就是exec:exec的用途,当然,该插件还允许你配置相关的程序运行参数。除了exec目标之外,exec-maven-plugin还提供了一个java目标,该目标要求你提供一个mainClass参数,然后它能够利用当前项目的依赖作为classpath,在同一个JVM中运行该mainClass。有时候,为了简单的演示一个命令行Java程序,你可以在POM中配置好exec-maven-plugin的相关运行参数,然后直接在命令运行 mvn exec:java 以查看运行效果。

jetty-maven-plugin

http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin

在进行Web开发的时候,打开浏览器对应用进行手动的测试几乎是无法避免的,这种测试方法通常就是将项目打包成war文件,然后部署到Web容器中,再启动容器进行验证,这显然十分耗时。为了帮助开发者节省时间,jetty-maven-plugin应运而生,它完全兼容 Maven项目的目录结构,能够周期性地检查源文件,一旦发现变更后自动更新到内置的Jetty Web容器中。做一些基本配置后(例如Web应用的contextPath和自动扫描变更的时间间隔),你只要执行 mvn jetty:run ,然后在IDE中修改代码,代码经IDE自动编译后产生变更,再由jetty-maven-plugin侦测到后更新至Jetty容器,这时你就可以直接测试Web页面了。需要注意的是,jetty-maven-plugin并不是宿主于Apache或Codehaus的官方插件,因此使用的时候需要额外的配置settings.xml的pluginGroups元素,将org.mortbay.jetty这个pluginGroup加入。

versions-maven-plugin

http://mojo.codehaus.org/versions-maven-plugin/

很多Maven用户遇到过这样一个问题,当项目包含大量模块的时候,为他们集体更新版本就变成一件烦人的事情,到底有没有自动化工具能帮助完成这件事情呢?(当然你可以使用sed之类的文本操作工具,不过不在本文讨论范围)答案是肯定的,versions-maven- plugin提供了很多目标帮助你管理Maven项目的各种版本信息。例如最常用的,命令 mvn versions:set -DnewVersion=1.1-SNAPSHOT 就能帮助你把所有模块的版本更新到1.1-SNAPSHOT。该插件还提供了其他一些很有用的目标,display-dependency- updates能告诉你项目依赖有哪些可用的更新;类似的display-plugin-updates能告诉你可用的插件更新;然后use- latest-versions能自动帮你将所有依赖升级到最新版本。最后,如果你对所做的更改满意,则可以使用 mvn versions:commit 提交,不满意的话也可以使用 mvn versions:revert 进行撤销。

小结

本文介绍了一些最常用的Maven插件,这里指的“常用”是指经常需要进行配置的插件,事实上我们用Maven的时候很多其它插件也是必须的,例如默认的编译插件maven-compiler-plugin和默认的打包插件maven-jar-plugin,但因为很少需要对它们进行配置,因此不在本文讨论范围。了解常用的Maven插件能帮助你事倍功半地完成项目构建任务,反之你就可能会因为经常遇到一些难以解决的问题而感到沮丧。本文介绍的插件基本能覆盖大部分Maven用户的日常使用需要,如果你真有非常特殊的需求,自行编写一个Maven插件也不是难事,更何况还有这么多开放源代码的插件供你参考。

本文的这个插件列表并不是一个完整列表,读者有兴趣的话也可以去仔细浏览一下Apache和Codehaus Mojo的Maven插件列表,以的到一个更为全面的认识。最后,在线的Maven仓库搜索引擎如http://search.maven.org/也能帮助你快速找到自己感兴趣的Maven插件。

关于作者

许晓斌(Juven Xu),国内社区公认的Maven技术专家、Maven中文用户组创始人、Maven技术的先驱和积极推动者,著有《Maven实战》一书。对Maven有深刻的认识,实战经验丰富,不仅撰写了大量关于Maven的技术文章,而且还翻译了开源书籍《Maven权威指南》,对Maven技术在国内的普及和发展做出了很大的贡献。就职于Maven之父的公司,负责维护Maven中央仓库,是Maven仓库管理器Nexus(著名开源软件)的核心开发者之一,曾多次受邀到淘宝等大型企业开展Maven方面的培训。此外,他还是开源技术的积极倡导者和推动者,擅长Java开发和敏捷开发实践。他的个人网站是:http://www.juvenxu.com

 

 

分享到:
评论

相关推荐

    eclipse安装maven插件

    下面我们将详细介绍如何在Eclipse中安装Maven插件。 首先,我们需要知道为什么要在Eclipse中安装Maven插件。Maven通过使用一个项目对象模型(Project Object Model,POM)文件,自动化了构建过程,包括编译、测试、...

    maven插件压缩包

    ** 常用 Maven 插件及其作用 ** - `maven-compiler-plugin`:负责编译源代码。 - `maven-resources-plugin`:处理资源文件,如复制到目标目录。 - `maven-surefire-plugin`:运行单元测试。 - `maven-jar-plugin`:...

    Maven常用插件整理.docx

    本文将详细介绍Maven中的常用插件及其功能。 1. Maven Assembly Plugin Maven Assembly 插件允许开发者将项目的输出,包括依赖、模块、网站文档和其他文档集成到一个单一的文档中,以便于定制打包。这个插件支持...

    Eclipse中Maven插件

    Eclipse中的Maven插件是开发Java项目时不可或缺的工具,它将强大的Maven构建系统与流行的Eclipse集成开发环境(IDE)相结合,为开发者提供了一种高效且规范化的项目管理方式。Maven是一个自动化构建工具,主要用于...

    Apache Maven插件

    下面将详细阐述Maven插件的核心功能、工作原理以及如何在实际开发中运用。 一、Maven插件核心功能 1. 构建管理:Maven插件可以自动编译源代码、运行测试、打包应用、生成文档等,使得开发者无需手动执行这些繁琐的...

    常用eclipse插件更新地址及MAVEN设置

    通过Eclipse的Maven插件,可以直接在IDE内进行Maven项目的创建、构建、打包、测试等操作。这不仅简化了命令行操作,也使得项目管理更加直观和便捷。 总结一下,本主题涵盖了Eclipse插件管理和Maven的`settings.xml`...

    maven仓库插件

    在`pom.xml`文件中,我们可以通过`<build>`标签下的`<plugins>`部分来配置和使用Maven插件。例如,为了配置Maven仓库插件,我们需要指定插件的groupId、artifactId、version以及可能的执行目标和参数。 ```xml ...

    maven插件及其使用方法

    Maven插件则是Maven生态系统中的一个重要组成部分,它们扩展了Maven的功能,帮助开发者执行特定的任务,如编译、测试、打包、部署等。在本文中,我们将深入探讨Maven插件的使用方法以及如何在实际开发中有效地利用...

    Maven学习必要插件

    5. **常用Maven插件** - `maven-resources-plugin`:处理资源文件,如复制、过滤等。 - `maven-jar-plugin`:打包Java应用为JAR文件。 - `maven-war-plugin`:打包Web应用为WAR文件。 - `maven-eclipse-plugin`...

    maven插件(eclipse)

    本文将详细介绍如何在 Eclipse 中安装和使用 Maven 插件。 1. **Maven 插件的安装** Maven 插件通常以 Eclipse 的插件形式存在,如 M2E (Maven Integration for Eclipse)。要安装 M2E,首先需要确保 Eclipse 版本...

    [maven] 常用插件解析.docx

    接下来,我们将介绍一些常用的 Maven 插件: 1. maven-antrun-plugin maven-antrun-plugin 能让用户在 Maven 项目中运行 Ant 任务。用户可以直接在该插件的配置以 Ant 的方式编写 Target,然后交给该插件的 run ...

    Eclipse下载与Maven插件安装

    本文将详细介绍Eclipse的下载与安装,以及如何在Eclipse中安装Maven插件,帮助开发者快速搭建起开发环境。 #### Eclipse的下载与安装 1. **访问官方网站**:首先,打开Eclipse官方网站(https://www.eclipse.org/...

    Maven 插件

    3. **常用Maven插件** - `maven-compiler-plugin`:编译源代码,支持JDK版本配置和源码、目标码的编码设置。 - `maven-resources-plugin`:处理资源文件,如复制、过滤静态资源。 - `maven-surefire-plugin`:...

    maven插件及其使用方法(2)

    **六、常用Maven插件** 1. **maven-assembly-plugin**:创建可分发的归档文件,如zip或tar.gz。 2. **maven-resources-plugin**:处理项目资源文件,如复制和过滤。 3. **maven-javadoc-plugin**:生成Javadoc文档...

    maven常用包

    三、Maven插件 1. 编译插件(maven-compiler-plugin):负责Java源代码的编译。 2. 打包插件(maven-jar-plugin):将编译后的类打包成JAR文件。 3. 资源插件(maven-resources-plugin):处理项目资源文件,如复制...

    Eclipse安装Maven插件(可参照文档)

    本篇文章将详细讲解如何在Eclipse中安装Maven插件,以便更好地进行Java项目的开发。 首先,我们需要了解Eclipse和Maven的基本概念。Eclipse是一个开源的、跨平台的IDE,它提供了丰富的功能,支持多种编程语言,包括...

    Maven3实战笔记05仓库依赖解析与插件解析

    Maven插件同样在`pom.xml`中声明,位于`<build>`标签下: ```xml <groupId>org.apache.maven.plugins <artifactId>maven-compiler-plugin <version>3.8.1 <source>1.8 <target>1.8 ``` 这段...

    maven-compiler-plugin-3.8.0-source-release插件

    对于大型项目,推荐使用 Maven 的私有仓库来存储常用插件,以提高构建速度。 ** 总结** `maven-compiler-plugin-3.8.0-source-release` 是 Maven 生态系统中不可或缺的一部分,它提供了可靠的源代码编译功能,使得...

    Maven插件

    #### 四、常用Maven生命周期及命令 Maven提供了三种主要的生命周期:`clean`、`default` 和 `site`。每种生命周期都包含了一系列的阶段,每个阶段可以执行特定的任务。 1. **Clean Lifecycle**: - `mvnclean`:...

    Mybatis+Maven插件

    4. **Maven插件**:Maven的插件机制十分强大,如`maven-compiler-plugin`用于编译Java源代码,`maven-surefire-plugin`负责运行单元测试。 结合Mybatis和Maven,我们可以使用Mybatis Generator插件来自动化生成DAO...

Global site tag (gtag.js) - Google Analytics