Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,像编译是通过maven-compile-plugin实现的、测试是通过maven-surefire-plugin实现的,maven也内置了很多插件,所以我们在项目进行编译、测试、打包的过程是没有感觉到。

进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven-compiler-plugin的compile目标用来编译位于src/main/Java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。

认识上述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。

下面列举了一些常用的核心插件,每个插件的如何配置,官方网站都有详细的介绍。

一个插件通常提供了一组目标,可使用以下语法来执行:

mvn [plugin-name]:[goal-name]

例如,一个Java项目使用了编译器插件,通过运行以下命令编译

mvn compiler:compile

Maven提供以下两种类型的插件:

l   构建插件

在生成过程中执行,并应在pom.xml中的<build/>元素进行配置

l   报告插件

在网站生成期间执行的,应该在pom.xml中的<reporting/>元素进行配置。

这里仅列举几个常用的插件,每个插件的如何进行个性化配置在官网都有详细的介绍。

  1. <plugins>
  2. <plugin>
  3. <!-- 编译插件 -->
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-compiler-plugin</artifactId>
  6. <version>2.3.2</version>
  7. <configuration>
  8. <source>1.5</source>
  9. <target>1.5</target>
  10. </configuration>
  11. </plugin>
  12. <plugin>
  13. <!-- 发布插件 -->
  14. <groupId>org.apache.maven.plugins</groupId>
  15. <artifactId>maven-deploy-plugin</artifactId>
  16. <version>2.5</version>
  17. </plugin>
  18. <plugin>
  19. <!-- 打包插件 -->
  20. <groupId>org.apache.maven.plugins</groupId>
  21. <artifactId>maven-jar-plugin</artifactId>
  22. <version>2.3.1</version>
  23. </plugin>
  24. <plugin>
  25. <!-- 安装插件 -->
  26. <groupId>org.apache.maven.plugins</groupId>
  27. <artifactId>maven-install-plugin</artifactId>
  28. <version>2.3.1</version>
  29. </plugin>
  30. <plugin>
  31. <!-- 单元测试插件 -->
  32. <groupId>org.apache.maven.plugins</groupId>
  33. <artifactId>maven-surefire-plugin</artifactId>
  34. <version>2.7.2</version>
  35. <configuration>
  36. <skip>true</skip>
  37. </configuration>
  38. </plugin>
  39. <plugin>
  40. <!-- 源码插件 -->
  41. <groupId>org.apache.maven.plugins</groupId>
  42. <artifactId>maven-source-plugin</artifactId>
  43. <version>2.1</version>
  44. <!-- 发布时自动将源码同时发布的配置 -->
  45. <executions>
  46. <execution>
  47. <id>attach-sources</id>
  48. <goals>
  49. <goal>jar</goal>
  50. </goals>
  51. </execution>
  52. </executions>
  53. </plugin>
  54. </plugins>

除了这些核心插件之外,还有很多优秀的第三方插件,可以帮助我们快捷、方便的构架项目。当使用到某些功能或者特性的时候多加搜索,往往得到让你惊喜的效果。

例如,项目中使用了Mybatis,就有一款神奇的maven插件,运行一个命令,就可以根据数据库的表,自动生成Mybatis的mapper配置文件以及DAO层接口模板。

在pom.xml中添加plugin:

  1. <plugin>
  2. <groupId>org.mybatis.generator</groupId>
  3. <artifactId>mybatis-generator-maven-plugin</artifactId>
  4. <version>1.3.2</version>
  5. <configuration>
  6. <configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>
  7. <verbose>true</verbose>
  8. <overwrite>true</overwrite>
  9. </configuration>
  10. <executions>
  11. <execution>
  12. <id>Generate MyBatis Artifacts</id>
  13. <goals>
  14. <goal>generate</goal>
  15. </goals>
  16. </execution>
  17. </executions>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.mybatis.generator</groupId>
  21. <artifactId>mybatis-generator-core</artifactId>
  22. <version>1.3.2</version>
  23. </dependency>
  24. </dependencies>
  25. </plugin>

定义generatorConfig.xml配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatisGenerator Configuration 1.0//EN"  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  3. <generatorConfiguration>
  4. <classPathEntry  location="/Users/winner/mysql/mysql-connector-java-5.1.36.jar"/>
  5. <context id="DB2Tables" targetRuntime="MyBatis3">
  6. <!-- 去掉自动生成的注解 -->
  7. <commentGenerator>
  8. <property name="suppressAllComments" value="true"/>
  9. </commentGenerator>
  10. < jdbcConnection driverClass="com.mysql.jdbc.Driver"  connectionURL="jdbc:mysql://localhost:3344/db?characterEncoding=utf8" userId="id" password="password">
  11. </jdbcConnection>
  12. <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal -->
  13. <javaTypeResolver>
  14. <property name="forceBigDecimals" value="false"/>
  15. </javaTypeResolver>
  16. <!-- 生成映射类-->
  17. <javaModelGeneratortarget Package="com.clf.model"  targetProject="/Users/winner/Documents/workspace/project/src/main/java/">
  18. <!-- enableSubPackages:是否让schema作为包的后缀 -->
  19. <property name="enableSubPackages" value="true"/>
  20. <property name="trimStrings" value="true"/>
  21. </javaModelGenerator>
  22. <!-- 生成xml文件-->
  23. <sqlMapGeneratortarget Package="com.clf.mapper" targetProject="/Users/winner/Documents/workspace/project/src/main/resources/">
  24. <property name="enableSubPackages" value="true"/>
  25. <property name="trimStrings" value="true"/>
  26. </sqlMapGenerator>
  27. <!-- 生成mapperinterface-->
  28. <javaClientGenerator type="XMLMAPPER"  targetPackage="com.clf.mapper"  targetProject="/Users/winner/Documents/workspace/project/src/main/java/">
  29. <property name="enableSubPackages" value="true"/>
  30. <property name="trimStrings" value="true"/>
  31. </javaClientGenerator>
  32. <table tableName="table_name" domainObjectName="object_name"
  33. enableCountByExample="false" enableUpdateByExample="false"
  34. enableDeleteByExample="false" enableSelectByExample="false"
  35. selectByExampleQueryId="false"/>
  36. </context>
  37. </generatorConfiguration>

然后定位到pom.xml所在的路径下面,运行:

mvn mybatis-generator:generate

所有的文件就会自动生成,怎一个爽字了得。

Maven之(三)Maven插件的更多相关文章

  1. Maven系列学习(三)Maven生命周期和插件

    Maven生命周期和插件 Maven另外的两个核心概念就是生命周期和插件,Maven的生命周期都是抽象的,其实实际行为都是由插件来完成的,生命周期和插件两者协同工作 1.生命周期 Maven的生命周期 ...

  2. Maven学习(三)-----Maven本地资源库

    Maven本地资源库 Maven的本地资源库是用来存储所有项目的依赖关系(插件jar和其他文件,这些文件被Maven下载)到本地文件夹.很简单,当你建立一个Maven项目,所有相关文件将被存储在你的M ...

  3. Maven系列三Maven内置变量

    Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...

  4. Maven学习 三 Maven与Eclipse结合使用

    一检查是否已经集成了Maven 现在的Eclipse一般都是集成了Maven,如果确定集成开发工具是否集成了Maven, Windows->preferences->Maven,查看是否已 ...

  5. (十二)Maven生命周期和插件

    除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段packag ...

  6. maven生命周期和插件

    maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...

  7. Maven生命周期和插件机制

    Maven中的一个非常重要的概念是生命周期和插件,这篇文章重点介绍下Maven的生命周期. Maven的生命周期是抽象的,具体的功能是有具体的插件来完成的,Maven有相当多的功能插件,以至于Mave ...

  8. [maven] 生命周期和插件

    maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...

  9. Maven生命周期(插件)

    maven拥有三套相互独立的生命周期,它们分别是clean,default和site.clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site 生命周期的目的是建立项目站 ...

  10. maven:安装m2eclipse插件

    一.安装maven 1.下载maven:http://pan.baidu.com/s/1hqIbx6s 2.解压并配置path路径(直接替换最新的maven包,即可升级) 3.测试 二.安装m2ecl ...

随机推荐

  1. ps入门教程:画笔工具、铅笔工具、渐变工具等的使用

    本节课程主要内容:学习画笔工具.铅笔工具.颜色替换工具.历史记录画笔工具.历史记录艺术画笔工具.渐变工具和油漆桶 工具的应用.------------------------------------- ...

  2. 一个简单的Garbage Collector的实现

    一个简单的Garbage Collector的实现 前言: 最近看了google的工程师写的一个非常简单的垃圾收集器,大概200多行C代码,感叹大牛总能够把复杂的东西通过很简单的语言和代码表达出来.为 ...

  3. [转]iOS Tutorial – Dumping the Application Memory Part 2

    Source:https://blog.netspi.com/ios-tutorial-dumping-the-application-memory-part-2/ In my previous bl ...

  4. cocos2d(CCSprite绑定不规则刚体与精灵一起移动)

    对于不规则的精灵我们可以借助PhysicsEditor来制作shape , 对于地图可以使用Tiled软件制作瓷砖地图. 今天主要记录一下如何把CCSprite与不规则刚体进行绑定,然后一起移动 // ...

  5. HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象

    HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象 通过前面对“HttpController的激活”的介绍我们已经知道了ASP.NET Web API通过Ht ...

  6. JS树型菜单

    本树型菜单主要实现功能有:基本的树型菜单,可勾选进行多选项操作. 本树型菜单适合最初级的学者学习,涉及内容不难,下面看代码. 首先看View的代码,第一个<div>用来定义树显示的位置和i ...

  7. ASP.NET MVC3开发 - CodeFisrt数据库篇之M层验证之调用远程方法(Remote)验证

    本文讲述在作者在使用.net mvc3进行开发的时候用到的两种调用远程验证的方法,第一种方法比较傻瓜,第二种方法方便好用,调用远程验证是个比较常见的验证方法,比如注册用户时的用户名唯一性验证. 作者原 ...

  8. 关于Java、Python、Go编程思想的不同

    Go学习笔记 - 关于Java.Python.Go编程思想的不同 看了两周七牛团队翻译的<Go语言程序设计>,基本上领略到了Go语言的魅力.学习一个语言,语法什么的任何人都是很容易学会,难 ...

  9. JAVA小知识点-Finally和Return的执行关系

    如果Try和Catch中存在return语句的时候Finally内的语句是否会执行,执行的时候对结果又有什么影响呢?我写了个例子来试验这个问题: public static Map<String ...

  10. 为什么不能在子类或外部发布C#事件

    为什么不能在子类或外部发布C#事件 背景 一个朋友问了一个问题:“为什么不能在子类或外部发布C#事件?”,我说我不知道,要看看生产的IL代码,下面我们看看. 测试 代码 1 using System; ...