码迷,mamicode.com
首页 > 其他好文 > 详细

maven学习系列5----插件

时间:2016-05-03 18:44:12      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

生命周期

maven包含三套生命周期,每套生命周期中包含多个阶段,每套生命周期内的阶段有前后依赖关系,但是不同生命周期的阶段之间是相互独立的:

  • clean:清理项目(主要是删除target目录下的内容)
  • default:构建项目,包含编译、测试、安装(把编译出来的构建拷贝到本地仓库)、部署(拷贝到远程仓库)等几个主要阶段(详细参见附1default生命周期)
  • site:建立和发布项目站点,Maven可以基于POM所包含的信息自动生成一个友好的站点,方便团队交流。这个对于团队开发比较有帮助,个人开发很少会使用。

插件

1,目标

maven只是定义了抽象的生命周期,具体的功能实现还是需要交由插件来完成(插件也是maven的一种构件)

每个插件都会包含多个目标,每个目标对应一个功能,这些可以通过查看插件相关信息来获取,写法:插件前缀:该插件目标。例如compiler:compile表示插件maven-compiler-plugin的compile目标。

生命周期与插件的目标相互绑定,来完成某个具体的构建任务。

2,插件内置绑定

为了能让用户几乎不用任何配置就能构建maven项目,maven在核心为一些主要的生命周期阶段绑定了很多插件的目标。如下分别对应三套生命周期的内置插件绑定。

技术分享技术分享

技术分享

3,自定义绑定

用户可以在pom.xml文件中配置将某个插件目标绑定到生命周期的某个阶段上(一般内置绑定已经够用),这种配置方法的常见的例子是拷贝项目的依赖包到target/lib/目录下,创建项目的源码jar包,内置的插件绑定关系中并没有涉及这些任务,因此需要用户自行配置。

例如想在verify阶段将项目的主代码打包成jar文件,就可以如下配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.1.1</version>
    <executions>
        <execution>
            <id>attach-source</id>
            <phase>verify</phase>
            <goals>
                <goal>jar-no-fork</goal>
            </goals>
        </execution>
    </executions>
</plugin>
例如想在打包阶段拷贝项目的依赖包(主要用于构建可执行的jar包),可以如下配置

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <!-- ${project.build.directory}为Maven内置变量,缺省为target -->  
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <!-- 表示是否不包含间接依赖的包 -->  
                <excludeTransitive>false</excludeTransitive>
                <!-- 表示复制的jar文件去掉版本信息 -->  
                <stripVersion>true</stripVersion>
            </configuration>
        </execution>
    </executions>
</plugin>

说明:

  • 自定义绑定是在<execution/>标签中配置的
  • <id/>标签配置自定义绑定任务的唯一ID
  • <phase/>标签配置生命周期的阶段
  • <goals/>标签配置插件的目标
  • <configuration/>标签与<goals/>标签同级配置插件目标的参数,也可以和插件的坐标同级来配置插件的全局配置


4,命令行中执行

几种常见的命令行执行内置绑定的方法

  • mvn clean:该命令调用clean生命周期的clean阶段
  • mvn test:该命令调用default生命周期的test阶段(即从validate、initialize一直到test阶段)
  • mvn clean install:该命令调用clean生命周期的clean阶段和default生命周期的install阶段(即从validate、initialize一直到install阶段)
  • mvn clean deploy sit-deploy:谇命令调用命令调用clean生命周期的clean阶段、default生命周期的deploy阶段以及site生命周期的site-deploy阶段。

还可以直接用[插件前缀:插件目标]的方式来调用,如下

  • mvn dependency:list:查看项目依赖的构件列表

5,eclipse中配置执行maven任务

在eclipse中右键点击maven项目名找到run里面会有maven的一些执行任务,如下所示

技术分享

如果这些默认的执行任务不能满足要求,也可以选中上图中的第2个Maven build...,会出现如下配置,或在在goals中填入相应的任务即可,格式为:插件前缀:插件目标(例如compiler:testCompile),如果有参数也可以在下图第二个红框中添加,最后点击Run按钮即可。

技术分享

6,插件仓库

与依赖构件一样,插件构件同样基于坐标存储在maven仓库中,不过插件仓库是单独仓库,在配置文件的<pluginRepositories/>标签中配置,如下

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <name>Maven Plugin Repository</name>
        <url>https://repo1.maven.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </pluginRepository>
</pluginRepositories>

另外,如果在pom中配置的插件是maven官方插件的话,在<plugin/>配置中可以省略groupId,这是maven默认插件groupId是org.apache.maven.plugins,这就是maven官方插件的groupId。

7,插件信息查询

在命令行下进入到项目pom.xml所在目录,执行命令:mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddeftail,其中粗体部分是需要查询的插件的坐标,需要在pom.xml中已经配置才可以查询到

还可以在线查询,maven官方插件列表在http://maven.apache.org/plugins/index.html页面找到。

附1,defalut生命周期:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources     复制并处理资源文件,至目标目录,准备打包。
  • compile     编译项目的源代码。
  • process-classes
  • generate-test-sources 
  • process-test-sources 
  • generate-test-resources
  • process-test-resources     复制并处理资源文件,至目标测试目录。
  • test-compile     编译测试源代码。
  • process-test-classes
  • test     使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  • prepare-package
  • package     接受编译好的代码,打包成可发布的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install     将包安装至本地仓库,以让其它项目依赖。
  • deploy     将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

附2,常用插件列表

插件名称

用途

来源

maven –clean -plugin

清理项目

Apache

maven –compile -plugin

编译项目

Apache

maven –deploy -plugin

部署项目

Apache

maven –install -plugin

安装项目

Apache

maven –resources -plugin

处理资源文件

Apache

maven –site -plugin

生成站点

Apache

maven –surefire -plugin

执行测试

Apache

maven –jar -plugin

构建JAR项目

Apache

maven –war -plugiin

构建war项目

Apache

maven –shade -plugin

构建包含遗憾的JAR包

Apache

maven –changelog -plugin

生产版本控制变更报告

Apache

maven –checkstyle -plugin

生成checkStyle报告

Apache

maven –javadoc –plugin

生成JavaDoc文档

Apache

maven –jxr –plugin

生成源码交叉引用文档

Apache

maven –pmd –plugin

生成PMD报告

Apache

maven –project –info -reports –plugin

生成项目信息报告

Apache

maven –surefire –plugin

生成单元测试报告

Apache

maven –antrun –plugin

调用Ant任务

Apache

maven -archetype –plugin

基于Archetype生成项目骨架

Apache

maven –assembly –plugin

构建自定义格式的分布包

Apache

maven –dependency –plugin

依赖分析及控制

Apache

maven –enforcer –plugin

定义规则并强制要求遵守

Apache

maven –pgp –plugin

为项目构建生成PGP签名

Apache

maven -invoke –plugin

自动运行Maven项目构建并验证

Apache

maven –release –plugin

自动项目版本发布

Apache

maven –scm –plugin

集成版本控制系统

Apache

maven –source –plugin

生成源码包

Apache

maven –eclipse –plugin

生成Eclipse项目环境变量

Apache

jboss –maven –plugin

启动、停止Jboss,部署项目

Codehaus

properties –maven –plugin

从properties文件读写Maven属性

Codehaus

sql –maven –plugin

运行SQL脚本

Codehaus

tomcat –maven –plugin

启动、停止、部署项目

Codehaus

versions –maven –plugin

自动化批量更新POM版本

Codehaus

cargo –maven –plugin

启动/停止/配置各类Web容器自动化部署Web项目

Cargo

jetty –maven –plugin

集成jetty容器,实现快速开发测试

Eclipse

maven –gae –plugin

集成Google APP Engine

Googlecode

maven –android –plugin

构建Android项目

Googlecode



附3,参考

《maven实战》

http://juvenshun.iteye.com/blog/213959

http://www.cnblogs.com/tonychanleader/archive/2013/05/11/3072703.html

maven学习系列5----插件

标签:

原文地址:http://blog.csdn.net/itsenlin/article/details/51295667

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!