插件是maven的核心,所有的执行操作都是基于插件来完成的,为了让一个插件可以执行众多的类似的功能,maven为插件设定了目标,一个插件中有一个或者多个目标,其实生命周期的重要的每个阶段都是由插件的具体目标执行的。
1.maven-antrun-plugin
http://maven.apache.org/plugins/maven-antrun-plugin/
maven-antrun-plugin能让用户在Maven项目中运行Ant任务。用户可以直接在该插件的配置以Ant的方式编写Target,然后交给该插件的run目标去执行。在一些由Ant往Maven迁移的项目中,该插件尤其有用。此外当你发现需要编写一些自定义程度很高的任务,同时又觉得Maven不够灵活时,也可以以Ant的方式实现之。maven-antrun-plugin的run目标通常与生命周期绑定运行。
2.maven-archetype-plugin
http://maven.apache.org/archetype/maven-archetype-plugin/
Archtype指项目的骨架,Maven初学者最开始执行的Maven命令可能就是mvn archetype:generate,这实际上就是让maven-archetype-plugin生成一个很简单的项目骨架,帮助开发者快速上手。可能也有人看到一些文档写了mvn archetype:create,但实际上create目标已经被弃用了,取而代之的是generate目标,该目标使用交互式的方式提示用户输入必要的信息以创建项目,体验更好。maven-archetype-plugin还有一些其他目标帮助用户自己定义项目原型,例如你由一个产品需要交付给很多客户进行二次开发,你就可以为他们提供一个Archtype,帮助他们快速上手。
3.maven-assembly-plugin
http://maven.apache.org/plugins/maven-assembly-plugin/
maven-assembly-plugin的用途是制作项目分发包,该分发包可能包含了项目的可执行文件、源代码、readme、平台脚本等等。maven-assembly-plugin支持各种主流的格式如zip、tar.gz、jar和war等,具体打包哪些文件是高度可控的,例如用户可以按文件级别的粒度、文件集级别的粒度、模块级别的粒度、以及依赖级别的粒度控制打包,此外,包含和排除配置也是支持的。maven-assembly-plugin要求用户使用一个名为assembly.xml
的元数据文件来表述打包,它的single目标可以直接在命令行调用,也可以被绑定至生命周期。
4.maven-dependency-plugin
http://maven.apache.org/plugins/maven-dependency-plugin/
maven-dependency-plugin最大的用途是帮助分析项目依赖,dependency:list能够列出项目最终解析到的依赖列表,dependency:tree能进一步的描绘项目依赖树,dependency:analyze可以告诉你项目依赖潜在的问题,如果你有直接使用到的却未声明的依赖,该目标就会发出警告。maven-dependency-plugin还有很多目标帮助你操作依赖文件,例如dependency:copy-dependencies能将项目依赖从本地Maven仓库复制到某个特定的文件夹下面。
5.maven-enforcer-plugin
http://maven.apache.org/plugins/maven-enforcer-plugin/
在一个稍大一点的组织或团队中,你无法保证所有成员都熟悉Maven,那他们做一些比较愚蠢的事情就会变得很正常,例如给项目引入了外部的SNAPSHOT依赖而导致构建不稳定,使用了一个与大家不一致的Maven版本而经常抱怨构建出现诡异问题。maven-enforcer-plugin能够帮助你避免之类问题,它允许你创建一系列规则强制大家遵守,包括设定Java版本、设定Maven版本、禁止某些依赖、禁止SNAPSHOT依赖。只要在一个父POM配置规则,然后让大家继承,当规则遭到破坏的时候,Maven就会报错。除了标准的规则之外,你还可以扩展该插件,编写自己的规则。maven-enforcer-plugin的enforce目标负责检查规则,它默认绑定到生命周期的validate阶段。
6.maven-help-plugin
http://maven.apache.org/plugins/maven-help-plugin/
maven-help-plugin是一个小巧的辅助工具,最简单的help:system可以打印所有可用的环境变量和Java系统属性。help:effective-pom和help:effective-settings最为有用,它们分别打印项目的有效POM和有效settings,有效POM是指合并了所有父POM(包括Super POM)后的XML,当你不确定POM的某些信息从何而来时,就可以查看有效POM。有效settings同理,特别是当你发现自己配置的settings.xml没有生效时,就可以用help:effective-settings来验证。此外,maven-help-plugin的describe目标可以帮助你描述任何一个Maven插件的信息,还有all-profiles目标和active-profiles目标帮助查看项目的Profile。
7.maven-release-plugin
http://maven.apache.org/plugins/maven-release-plugin/
maven-release-plugin的用途是帮助自动化项目版本发布,它依赖于POM中的SCM信息。release:prepare用来准备版本发布,具体的工作包括检查是否有未提交代码、检查是否有SNAPSHOT依赖、升级项目的SNAPSHOT版本至RELEASE版本、为项目打标签等等。release:perform则是签出标签中的RELEASE源码,构建并发布。版本发布是非常琐碎的工作,它涉及了各种检查,而且由于该工作仅仅是偶尔需要,因此手动操作很容易遗漏一些细节,maven-release-plugin让该工作变得非常快速简便,不易出错。maven-release-plugin的各种目标通常直接在命令行调用,因为版本发布显然不是日常构建生命周期的一部分。
上面7个插件来之许晓斌的不博客:http://www.infoq.com/cn/news/2011/04/xxb-maven-7-plugin
下面的插件是我们最常用的也是我从许晓斌的博客上转载的:http://www.infoq.com/cn/news/2011/05/xxb-maven-8-plugin
1.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传入属性的值,以实现更为灵活的构建。
这个插件我写了例子:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.2</version> <executions> <execution> <phase>package</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
这个会把所有的源代码带包成一个jar包,然后这个这个是在package阶段执行的
2.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参数实现的。
3.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到远程仓库。
4.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 以查看运行效果。
5.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加入。
6.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 进行撤销。
7.maven-rar-plugin
这个插件可以打rar包,默认绑定的生命周期是package
http://maven.apache.org/plugins/maven-antrun-plugin/
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-rar-plugin</artifactId> <version>2.2</version> <executions> <execution> <phase>package</phase> <goals><goal>rar</goal></goals> </execution> </executions> </plugin>
8.数据库测试插件
这个插件主要用来测试数据的,可以写各总sql语句
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-maven-plugin</artifactId> <version>1.5</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.18</version> </dependency> </dependencies> <configuration> <driver>${mysql.driver}</driver> <url>${mysql.url}</url> <username>${mysql.username}</username> <password>${mysql.password}</password> <sqlCommand> create database IF NOT EXISTS maven_test </sqlCommand> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>execute</goal> </goals> </execution> </executions> </plugin>
本文介绍了一些最常用的Maven插件,这里指的“常用”是指经常需要进行配置的插件,事实上我们用Maven的时候很多其它插件也是必须的,例如默认的编译插件maven-compiler-plugin和默认的打包插件maven-jar-plugin,但因为很少需要对它们进行配置,因此不在本文讨论范围。了解常用的Maven插件能帮助你事倍功半地完成项目构建任务,反之你就可能会因为经常遇到一些难以解决的问题而感到沮丧。本文介绍的插件基本能覆盖大部分Maven用户的日常使用需要,如果你真有非常特殊的需求,自行编写一个Maven插件也不是难事,更何况还有这么多开放源代码的插件供你参考。
以上文章部分类容是我转自许晓斌的博客
相关推荐
**四、Maven 的工作流程** 1. **构建生命周期**: Maven 的生命周期包括清理(clean)、编译(compile)、测试(test)、打包(package)、验证(verify)、集成测试(install)、部署(deploy)等阶段。 2. **构建...
`yuicompressor-maven-plugin`是一款强大的Maven插件,主要用于优化前端资源,特别是JavaScript和CSS文件。这个插件是基于YUI Compressor,一个由Yahoo开发的开源工具,它能有效地压缩和混淆代码,从而减少文件大小...
2. **NOTICE**: 此文件通常包含对Maven中使用的第三方库的版权和许可信息,提醒用户注意这些依赖项可能需要遵守的额外条款。 3. **README.txt**: 这是一个标准的文本文件,可能会包含关于如何安装、配置和使用Maven...
Maven有两个主要的仓库:本地仓库(Local Repository)存储已下载的依赖,全局仓库(Remote Repository)包含公开的第三方库,如Central Repository。 9. **Maven的命令行工具**: Maven提供了命令行工具`mvn`,...
"软件/插件"意味着Maven不仅可以管理项目本身,还可以处理依赖的库和插件,帮助开发者构建复杂的Java应用程序。 压缩包子文件的文件名称列表“mac-maven-3.9.6”可能是包含了上述安装步骤或其他辅助文件的目录或...
Eclipse提供了Maven插件(M2E),使得开发者可以直接在IDE内管理Maven项目、运行Maven目标以及同步项目配置。通过导入Maven项目(File > Import > Existing Maven Projects),Eclipse会自动识别`pom.xml`文件,并将...
4. **boot**:这个目录包含了用于启动 Maven 的小型内嵌 Jetty 服务器,主要用于插件的自动下载和更新。 5. **bin**:包含了 Maven 的可执行脚本,如 `mvn`,用于在不同的操作系统上运行 Maven 命令。 6. **conf**...
接着,配置 Eclipse,找到 Maven4MyEclipse 下的 Installations,添加 Maven 的安装目录,选择 User Settings,选择 Maven 安装目录下的 settings.xml,单击 Update Settings。 三、加载 JEECG-MAVEN 项目 加载 ...
Apache Maven 是一个强大的项目管理和构建...3. **lib 目录:** 包含了 Maven 运行时所需的所有库文件和依赖项,包括 Maven 核心库、插件库、第三方库等。 4. **README 文件:** 提供了有关如何安装、配置和使用 Maven
"maven"是项目名称,"maven3"表明这是Maven的第三个主要版本,"maven3.1"特指3.1系列,而"apache-maven"是项目的全称,表明它是由Apache软件基金会维护的。 在"压缩包子文件的文件名称列表"中,我们只有一个条目:...
4. **lib** 目录:包含Maven运行所需的库文件,包括各种Apache软件基金会的项目和其他第三方库。 5. **LICENSE** 和 **NOTICE** 文件:提供了Apache Maven的许可信息和版权通知,Apache Maven遵循Apache License ...
Maven插件扩展了Maven的功能,用于执行特定任务,如打包(maven-jar-plugin)、部署(maven-deploy-plugin)、站点生成(maven-site-plugin)等。开发者可以通过在POM中配置插件来定制构建过程。 **7. 配置与设置**...
4. **boot**:这个目录包含了Maven内嵌的Java应用服务器,如Jetty,用于启动和运行Maven的自包含版本。这使得用户无需额外安装JVM就能运行Maven。 5. **bin**:这是存放可执行脚本的目录,包括启动和运行Maven的...
4. **插件**:Maven通过插件执行各种任务,如编译、测试、打包、部署等。每个任务对应于生命周期中的一个阶段,插件通过目标(goals)来执行特定任务。 5. **仓库**:Maven使用仓库来存储依赖库,包括本地仓库...
- **boot**:包含了Maven启动所需的类加载器,如`plexus-classworlds.jar`,用于加载Maven插件和项目依赖。 - **conf**:包含了Maven的配置文件,如`settings.xml`,用于设置本地仓库路径、远程仓库地址、镜像...
4. **依赖管理**:Maven能够自动管理项目的依赖关系,解决版本冲突问题。它会根据`pom.xml`中的依赖声明,自动下载所有依赖及其子依赖,并且遵循第一出现优先原则处理版本冲突。 5. **聚合项目**:Maven支持多模块...
- **NOTICE**:列出Maven所使用的第三方软件及相关的版权信息。 - **README.txt**:提供有关如何安装和使用Maven的简单指南。 - **bin**:这个目录包含了Maven的可执行脚本,如`mvn`命令行工具,用于在不同的操作...
Maven插件是Maven功能的扩展,如`maven-surefire-plugin`用于执行单元测试,`maven-javadoc-plugin`生成API文档。开发者可以根据需求选择和配置插件,实现定制化的构建流程。 总的来说,Apache Maven 3.2.5是Java...
4. **插件系统**:Maven通过插件机制扩展其功能,如支持不同的打包格式、执行复杂的构建任务等。 5. **项目信息管理**:POM文件不仅包含依赖信息,还包含了项目的基本信息,如作者、许可证、项目网站等,方便项目的...