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. Javascript多线程引擎(二)

    多线程Javascript解释器的大致架构 由于一个完整的解释器类似Google V8的解释器需要的工作量非常的大如需要实现如下的模块: 词法分析,语法分析器,AST转Byte模块,解释执行模块和JI ...

  2. WebService和AngularJS实现模糊过滤查询

    WebService和AngularJS实现模糊过滤查询   [概要] 网上看到一个不错的帖子,用WebService获取json,然后在前端使用AngularJs进行过滤搜索,看完文章后,按自己的想 ...

  3. MVC与Validate验证提示的样式修改

    MVC中使用Validate的验证,要修改错误提示样式一共有3处需要修改,否则就不太完美了: MVC中的Validate的验证机制只用在后台写一次,就可以完成前台和后台的完美验证,前台的验证主要是依靠 ...

  4. ASP.NET MVC扩展点

    16个ASP.NET MVC扩展点[附源码] 1.自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中!即:创建一个实现了IHttpmodule接口的类,并将 ...

  5. malloc内存分配与free内存释放的原理

    malloc内存分配与free内存释放的原理 前段时间一直想看malloc的原理,在搜了好几篇malloc源码后遂放弃,晦涩难懂. 后来室友买了本深入理解计算机系统的书,原来上面有讲malloc的原理 ...

  6. How To Configure Logging And Log Rotation In Apache On An Ubuntu VPS

    Introduction The Apache web server can be configured to give the server administrator important info ...

  7. 常用的模式、JSON与DTO

    表现层的设计(一)——常用的模式.JSON与DTO 上几篇博文介绍了 业务逻辑层和数据访问层,我认为写博文的作用主要是向业界的读者交流一种思想,点到为止,至于学习架构设计,通过几篇博文是讲不清楚的,还 ...

  8. CSS3 3D笨蛋教程

    英文原文An Introduction to CSS 3-D Transforms 爱因斯坦说所有概念都必须介绍给儿童们,若他们无法了解,这些理论就毫无价值. 透视 一个元素需要一个透视点才能激活3D ...

  9. ARP 和 RARP

    ARP 和 RARP 1.ARP      地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP地址时确地址解析协议定其物理地址的一种协议.      在 ...

  10. Using django model/authentication/authorization within Tornado

    There is a project which is deployed within django. So its authentication system is built from Djang ...