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

生命周期

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

时间: 2024-10-10 23:06:21

maven学习系列5----插件的相关文章

Maven学习系列一5分钟入门教程

Maven是基于项目对象模型的一个Apache开源项目.Maven的主要配置文件pom.xml就是项目模型的意思(Project Oriented Model),它是Apache Ant的衍生扩展. 安装 Maven是一个Java工具,所以你必须首先安装Java所需运行环境. 1.解压apache-maven-3.2.1-bin.zip到你想要安装maven的目录,例如,我解压文件到D:\apache-maven-3.2.1. 2.添加M2_HOME环境变量,(WinKey+Pause)快捷键调

maven学习系列2----maven简单配置

maven几个概念 1,POM(Project Object Model,项目对象模型), 描述项目如何构建.声明项目依赖等.以xml形式来编写命名为pom.xml,一个maven项目对应一个pom.xml.相当于Ant的build.xml文件,gradle的build.gradle文件. 2,构件, 使用maven工具可以将项目编译成很多种类型的包,常用的是jar/war/pom类型的包,这些包在maven的世界中就叫构件. 3,仓库, 统一存放所有maven项目共享的构件的地方.以group

maven学习系列6----聚合与继承

聚合 前面也讲过聚合的作用就是把多个模块(maven工程)放在一个模块内部,这个模块就可以说成是一个聚合,单独构建聚合模块就会把聚合在一起的其他模块一起构建(也可以配置只编译其中一部分模块).聚合模块的packageing必须是POM,聚合模块与被聚合的模块之间的关系如下图. 对于聚合模块来说,它知道有哪些被聚合的模块,但是被聚合的模块不知道这个聚合模块的存在. 假设聚合模块名为hello,需要聚合的模块名为hello1和hello2两个模块.这里只简单说一下聚合的配置方法,不涉及项目代码. 1

Maven学习系列之一 Eclipse中新建Maven项目

前提条件: 已经安装好JDK 已经安装好Maven 已经安装好Eclipse 已经安装好Maven插件 在Eclipse中新建Maven项目 [File]→[New]→[Other...] [Maven]→[Maven Project]→[Next >] 勾选[Create a simple project(skip archetype selection)]→[Next >] [在Group Id处填写一个名称,Artifact Id处填写一个名称,因为我们要建一个web项目,所以Packa

maven学习:jetty插件与Tomcat插件

1.jetty插件 要测试的web的pom里面,加入jetty的插件配置,示例如下: <!-- jetty插件 --> <plugin>     <groupId>org.mortbay.jetty</groupId>     <artifactId>jetty-maven-plugin</artifactId>     <version>8.1.14.v20131031</version>     <c

Maven学习之打包插件

maven的打包插件主要有maven-shade-plugin 和maven-assembly-plugin两种,两种插件的主要差别如下 (1) maven-assembly-plugin <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descr

maven学习系列(一)—maven安装和基本设置

maven下载和配置 第一步:下载apache-maven-2.3.2-bin.zip并解压到D:\tools,下载地址http://maven.apache.org/download.cgi 第二步:在环境变量中设置属性:M2_HOME = D:\tools\apache-maven-3.2.3-bin\apache-maven-3.2.3 ; PATH = ;%M2_HOME%\bin; 第三步:在dos以下输入mvn -v 如显演示样例如以下,则配置成功. 第四步:自己定义本地reposi

maven学习系列之(一)—maven的安装与基本设置

maven的下载与配置 第一步:下载apache-maven-2.3.2-bin.zip并解压到D:\tools,下载地址http://maven.apache.org/download.cgi 第二步:在环境变量中设置属性:M2_HOME = D:\tools\apache-maven-3.2.3-bin\apache-maven-3.2.3 ; PATH = ;%M2_HOME%\bin; 第三步:在dos下面输入mvn -v 如显示如下,则配置成功. 第四步:自定义本地repository

Gradle学习系列之一——Gradle快速入门(转)

这是一个关于Gradle的学习系列,其中包含以下文章: Gradle快速入门 创建Task的多种方法 读懂Gradle语法 增量式构建 自定义Property 使用java Plugin 依赖管理 构建多个Project 自定义Task类型 自定义Plugin 请通过以下方式下载本系列文章的Github示例代码: git clone https://github.com/davenkin/gradle-learning.git 和Maven一样,Gradle只是提供了构建项目的一个框架,真正起作