`
leonzhx
  • 浏览: 769374 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

第七章 生命周期和插件

阅读更多

1.   Maven 的生命周期就是为了对所有的构建过程进行抽象和统一。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。 Maven 的生命周期是抽象的,不做任何实际工作,实际任务都交由插件完成。(这种思想与 template method 非常类似)每个构建步骤可以绑定一个或者多个插件行为。 Maven 为大多数构建步骤编写并绑定了默认插件,如: maven-compiler-plugin maven-surefire-plugin

 

2.  M aven 拥有三套相互独立的生命周期,它们分别是: clean default site 。每个生命周期包含一些阶段 (phase) ,这些阶段是有顺序的,而且后面的阶段依赖于前面的阶段。用户和 Maven 最直接的交互方式是调用这些生命周期的阶段。在调用某一阶段时,该阶段所在的生命周期之前的阶段会首先被执行。但不同周期间的阶段是相互独立的。

 

3.   clean 生命周期的目的是清理项目,它包含三个阶段: pre-clean clean post-clean

 

4.   default 生命周期定义了真正构建时所需要执行的所有步骤,包含如下阶段 : validate initialize generate-soruces 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 pre-integration-test integration-test post-integration-test verify install deploy

 

5.   site 生命周期的目的是建立和发布站点,它包含四个阶段: pre-site site post-site site-deploy

 

6.   关于生命周期的详细介绍,可以参考:

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

 

7.   从命令行执行 Maven 任务的最主要方式就是调用 Maven 的生命周期阶段。如 mvn clean deploy site-deploy 调用了 clean 生命周期的 clean 阶段(自动触发 clean 之前的依赖: pre-clean )、 default 生命周期的 deploy 阶段(自动触发 deploy 之前的依赖)以及 site 生命周期的 site-deploy 阶段(自动触发 site-deploy 之前的依赖: pre-site site post-site )。

 

8.   插件以独立的构件形式存在, Maven 会在需要的时候下载并使用插件。

 

9.   一个插件可以完成多个任务(功能),每个功能就是一个插件目标( plugin goal )。如 dependency:analyze 表示插件 maven-dependency-plugin analyze 目标。

 

10.  M aven 生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。 Maven 的核心为一些主要的生命周期阶段默认绑定了很多插件目标,可以参考 :

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings

查看具体的绑定关系。由于项目的打包类型会影响构建的具体过程,因此 default 生命周期的阶段与插件目标的绑定关系由项目打包类型决定。

 

11.   POM 中自定义生命周期阶段与插件目标的绑定关系:

 

<build>

  <plugins>

    <plugin>

      <groupId>org.apache.maven.plugins</groupId>

      <artifactId>maven-source-plugin</artifactId>

      <version>2.1.1</version>

      <executions>

        <execution>

          <id>attach-sources</id>

          <phase>verify</phase>

          <goals>

            <goal>jar-no-fork</goal>

          </goals>

        </execution>

      </executions>

    </plugin>

  </plugins>

</build> 
 

可以将 mven-source-plugin 中的 jar-no-fork 目标(将项目的主代码打包成 jar 文件)绑定到 verify 这个 phase

 

12.   很多插件的目标在编写时已经定义了默认绑定阶段。可以用以下命令查看:

Mvn help:describe –Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 –Ddetail

 

13.   如果多个目标被绑定到同一个阶段,它们的执行顺序由插件声明的先后顺序决定。

默认绑定与自定义绑定的执行顺序是?

 

14.   可以在命令行执行 maven 命令时提供 plugin 的参数配置:

Mvn install –Dmaven.test.skip=true

maven.test.skip maven-surefire-plugin 的一个参数,当其值为 true 时,就会跳过执行测试。

 

15.   可以在 POM 的插件配置中对插件进行一个全局的参数配置:

 

<build>

  <plugins>

    <plugin>

      <groupId>org.apache.maven.plugins</groupId>

      <artifactId>maven-compiler-plugin</artifactId>

      <version>2.1</version>

      <configuration>

          <source>1.5</source>

          <target>1.5</target>

       </configuration>

      </plugin>

</plugins>

</build> 
 

该配置告诉 maven-compiler-plugin 要编译的源文件是 Java 1.5 的,并且生成与 JVM 1.5 兼容的字节代码文件。由于 maven-compiler-plugin 被绑定到 compile test-compile 阶段,所以上述配置对这两个阶段都会生效。

 

16.   我们还可以为某个插件目标及其绑定的某个阶段配置特定的参数:

 

<plugin>

  <groupId>org.apache.maven.plugins</groupId>

  <artifactId>maven-antrun-plugin</artifactId>

  <version>1.3</version>

  <executions>

    <execution>

      <id>ant-validate</id>

      <phase>validate</phase>

      <goals>

        <goal>run</goal>

      </goals>

      <configuration>

        <tasks>

          <echo>I’m bound to validate phase.</echo>

        </tasks>

      </configuration>

     </execution>

    <execution>

      <id>ant-verify</id>

      <phase>verify</phase>

      <goals>

        <goal>run</goal>

      </goals>

      <configuration>

        <tasks>

          <echo>I’m bound to verify phase.</echo>

        </tasks>

      </configuration>

    </execution>

  </executions>

</plugin> 
 

以上配置将 maven-antrun-plugin:run 绑定到了 validate verify 两个 phase ,但为两个 phase 设置了不同的参数。

 

17.   基本上所有的插件都来自于 Apache Codehaus

插件来源

插件列表

下载地址

Apache

http://maven.apache.org/plugins/index.html

http://repo1.maven.org/maven2/org/apache/maven/plugins

Codehaus

http://mojo.codehaus.org/plugins.html

http://repository.codehaus.org/org/code-haus/mojo/

 

 

 

 

 

 

 

 

18.   可以从插件目标的文档中查阅参数的 Expression 属性,它表示了该参数在命令行中的参数名,如果没有 Expression 则说明该插件目标参数只能在 POM 中配置。如:

Maven-surefire-plugin skip 参数, Expression :${maven.test.skip} 则在命令行中配置该参数时参数名就为 -Dmaven.test.skip 。而在 POM 中配置时,参数名为 skip

 

19.   我们既可以通过 mvn 命令激活某个生命周期阶段,也可以直接调用某个插件目标,因为有些任务不适合绑定到生命周期阶段上,如: maven-help-plugin:describe maven-dependency-plugin:tree 为了简化插件目标的定位, Maven 引入了插件前缀( Plugin Prefix ),可以用插件前缀替换插件坐标,方便在命令行直接运行插件。如:

Mvn help:describe –Dplugin=compiler –Dgoal=compile -Ddetail

 

20.   Maven 会区别对待依赖的远程仓库和插件的远程仓库。可以在 POM 中配置插件的远程仓库。 Maven 内置的插件仓库配置:

 

<pluginRepositories>

  <pluginRepository>

    <id>central</id>

    <name>Maven Plugin Repository</name>

    <url>http://repo1.maven.org/maven2</url>

    <layout>default</layout>

    <snapshots>

      <enabled>false</enabled>

    </snapshosts>

    <releases>

      <updatePolicy>never</updatePolicy
>

    </releases>

  </pluginRepository>

</pluginRepositories>
 

一般来说,中央仓库所包含的插件完全能够满足我们的需要。

 

21.   配置插件时可以不配置其 groupId Maven 会默认用 org.apache.maven.plugins

 

22.   Maven 在超级 POM 中为所有核心插件定义了版本。如果用户使用某个插件而没定义版本时,会使用超级 POM 中定义的版本,如果这个插件不属于核心插件, Maven 2 会解析成 lastest Maven 3 会解析成 release

 

23.   插件前缀会保存在 groupId/maven-metadata.xml 中。 Maven 在解析插件仓库元数据时,会默认使用 org.apahce.maven.plugins org.codehaus.mojo 两个 groupId ,用户可以配置 settings.xml Maven 检查其他 groupId 上的插件仓库元数据:

 

<settings>

  <pluginGroups>

    <pluginGroup>com.your.plugins</pluginGroup>

  </pluginGroups>

</settings> 
 

元数据信息如下:

 

<metadata>

  <plugins>

    <plugin>

      <name>Maven Clean Plugin</name>

      <prefix>clean</prefix>

       <artifactId>maven-clean-plugin</artifactId>

    </plugin>

    …

  </plugins>

</metadata> 
分享到:
评论

相关推荐

    Maven实战(高清版)

    背景案例第5章 坐标和依赖第6章 仓库第7章 生命周期和插件第8章 聚合与继承第9章 使用nexus创建私服第10章 使用maven进行测试第11章 使用hudson进行持续集成第12章 使用maven构建web应用第13章 版本管理第...

    maven window下安装包

    第7章:生命周期和插件/7.4 插件绑定/7.4.2 自定义生命周期和插件的绑定 第7章:生命周期和插件/7.5 插件配置/7.5.1 命令行插件参数设置 第7章:生命周期和插件/7.5 插件配置/7.5.2 POM文件中进行插件参数设置 第7章...

    深入浅出MyBatis技术原理与实战

    第 2 章: 主要介绍 MyBatis 的基础模块及其生命周期, 并给出实例。 第 3 章: 主要介绍 MyBatis 配置的主要含义和内容。 第 4 章: 介绍 MyBatis 映射器的主要元素及其使用方法。 第 5 章: 介绍动态 SQL, 助你...

    Android项目开发范例大全 9787113147945

    第1章Android基础入门 1.1在Eclipse中安装AndroidSDK和ADT 1.1.1下栽和安装JDK 1.1.2下栽和安装EclipseIDE ...第7章“手机终端”——手机自动服务和语音控制 第8章“Let'srace”——网络通信与地图服务

    Android插件框架Android-Plugin-Framework.zip

    如果插件和宿主共享依赖库,那边编译插件的时候不可将共享库编译到插件当中,包括共享库的代码以及R文件,但是需要在编译时添加到classpath中,且插件中如果要使用共享依赖库中的资源,需要使用共享库的R文件来进行...

    Android插件

    可以根据Activity或者fragment的生命周期对其生命周期方法位置进行先后排序,快捷键Ctrl + alt + K 7.CodeGlance 在右边可以预览代码,实现快速定位 8.findBugs-IDEA 查找bug的插件,Android Studio也提供了...

    Android典型技术模块开发详解

    第7章 常用控件 7.1 Button(按钮) 7.2 ImageButton(图片按钮) 7.3 ToggleButton(开关按钮) 7.4 TextView(文本视图) 7.5 ImageView(图片视图) 7.6 EditText(编辑框) 7.7 RadioButton(单选按钮) 7.8 ...

    jBPM5 用户指南-中文

    第七章 核心引擎:持久化和事务 60 7.1 运行时状态 60 7.1.1 二进制持久化 60 7.1.2 Safe Pionts 60 7.1.3 配置持久化 61 7.1.4 事务 64 7.2 流程定义 64 7.3 历史日志 64 7.3.1 将流程事件存储到数据库 65 第八章 ...

    JBPM5 用户指南

    第七章 核心引擎:持久化和事务 54 7.1 运行时状态 54 7.1.1 二进制持久化 54 7.1.2 Safe Pionts 54 7.1.3 配置持久化 55 7.1.4 事务 58 7.2 流程定义 58 7.3 历史日志 59 7.3.1 将流程事件存储到数据库 59 第八章 ...

    JBPM5权威指南

    第七章 核心引擎:持久化和事务 54 7.1 运行时状态 54 7.1.1 二进制持久化 54 7.1.2 Safe Pionts 54 7.1.3 配置持久化 55 7.1.4 事务 58 7.2 流程定义 58 7.3 历史日志 59 7.3.1 将流程事件存储到数据库 59 第八章 ...

    android手机短信管理系统毕业论文

    3.4 Android活动的生命周期 14 3.4.1 活动的生命状态 14 3.4.2 活动的运作流程 16 第4章 手机短信软件设计实现 18 4.1 系统设计需求 18 4.1.1 需求分析 18 4.1.2 下载开发资源 18 4.1.3 更新Ec1ipse并下载ADT...

    vue.js视频教程及源码(一)

    第七节:vue循环语句v-for 第八节:vue计算属性 第九节:vue监视属性 第十节:vue样式属性Class与Style绑定 第十一节:vue事件处理器 第十二节:vue表单处理 第十三节:vue生命周期 第十四节:vue-cli脚手架安装 第...

    vue.js视频教程及源码(二)

    第七节:vue循环语句v-for 第八节:vue计算属性 第九节:vue监视属性 第十节:vue样式属性Class与Style绑定 第十一节:vue事件处理器 第十二节:vue表单处理 第十三节:vue生命周期 第十四节:vue-cli脚手架安装 第...

    android手机短信管理系统论文 完整版

    3.4 Android活动的生命周期 14 3.4.1 活动的生命状态 14 3.4.2 活动的运作流程 16 第4章 手机短信软件设计实现 18 4.1 系统设计需求 18 4.1.1 需求分析 18 4.1.2 下载开发资源 18 4.1.3 更新Ec1ipse并下载ADT...

    python入门到高级全栈工程师培训 第3期 附课件代码

    第7章 01 ip地址与子网划分 02 ip地址配置 03 虚拟机网络模式 04 三层隔离验证试验 第8章 01 上节课复习 02 软件包介绍 03 rpm软件包管理 04 yum软件包管理 05 源码安装python3.5 06 ssh服务 07 apache服务 08 ...

Global site tag (gtag.js) - Google Analytics