文档章节

《Maven权威指南》学习笔记二十一_构建生命周期

SimpleClean
 SimpleClean
发布于 2014/02/19 11:19
字数 1196
阅读 933
收藏 10
点赞 0
评论 0

解释:

一个生命周期由若干个生命周期阶段组成,每个生命周期阶段绑定注册若干个目标,可人为注册目标到指定处。

Maven具有三种标准的生命周期:clean、default(构建)、site。

构建:

构建一个生命周期则完整的按序执行每个阶段的目标;构建一个生命周期阶段则按序执行不越过这个阶段的所有目标。

clean

包含3个生命周期阶段:pre-clean, clean, post-clean

自定义clean插件的行为:

<build>
    <plugins>
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <configuration>
          <filesets>
            <fileset>
              <directory>target-other</directory>
              <includes>
                <include>*.class</include>
              </includes>
            </fileset>
          </filesets>
        </configuration>
      </plugin>
    </plugins>
  </build>

default

默认生命周期阶段描述表(按序):

序号

生命周期阶段

描述

1

validate

验证项目一些必要的信息

2

generate-sources

生成编译过程需要的源代码

3

process-sources

处理源代码

4

generate-resources

生成打包需要的资源文件

5

process-resources

复制并处理资源文件至目标目录

6

compile

编译源代码

7

process-classes

后处理字节码文件

8

generate-test-sources

9

process- test-sources

10

generate- test-resources

11

process- test-resources

12

test-compile

13

test

使用单元测试框架运行测试

14

prepare-package

打包前准备操作

15

package

编译好的代码打包成可分发的格式

16

pre-integration-test

集成测试运行前操作

17

integration-test

集成测试

18

post-integration-test

集成测试后操作

19

verify

检查

20

install

安装到本地仓库

21

deploy

发布到远程仓库

 site

生成项目文档和报告站点的专有的生命周期。

包含4个阶段:pre-site, site, post-site, site-deploy

默认绑定到站点生命周期的阶段目标是:site阶段绑定site:sitesite-deploy阶段绑定site:deploy

 

不同打包方式下的生命周期

1, jar packaging

默认打包类型,默认打包目标有:

生命周期阶段                           目标

process-resources                resources:resources

compile                               compiler:compile

process-test-resources         resources:testResources

test-compile                        compiler:testCompile

test                                    surefire:test

package                              jar:jar

install                                 install:install

deploy                                deploy:deploy

 

2, pom packaging

生成的构件只是它本身,默认打包目标有:

生命周期阶段                           目标

package                     site:attach-descriptor

install                        install:install

deploy                       deploy:deploy

 

3, war packaging

生命周期阶段                           目标

process-resources                resources:resources

compile                               compiler:compile

process-test-resources          resources:testResources

test-compile                         compiler:testCompile

test                                     surefire:test

package                               war:war

install                                  install:install

deploy                                 deploy:deploy

 

4, 其他打包类型

maven plugin, ear, ejb, swf, swc, nar等。

可自定义打包类型,自定义打包类型需要配置定义了定制打包类型生命周期的插

件,如为Adobe Flex (SWF)定制打包类型:

<project>
  ...
  <packaging>swf</packaging>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>net.israfil.mojo</groupId>
        <artifactId>maven-flex2-plugin</artifactId>
        <version>1.4-SNAPSHOT</version>
        <extensions>true</extensions>
        <configuration>
          <debug>true</debug>
          <flexHome>${flex.home}</flexHome>
          <useNetwork>true</useNetwork>
          <main>org/sonatype/mavenbook/Main.mxml</main>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

通用生命周期目标

resources:resources 

默认绑定到process-resources阶段,默认行为是将src/main/resources下的资源文件复制到target/classes下,且会应用资源过滤器

资源过滤:即资源变量替换。可以再xml资源文件中使用${}引用properties配置文件属性值,要想正常使用,还要再POM文件增加资源过滤配置(属性替换)。

<build>
   <filters>
     <filter>src/main/filters/default.properties</filter> 属性配置文件
   </filters>
   <resources>
     <resource>
       <directory>src/main/resources</directory>
       <filtering>true</filtering>  过滤开关,只有打开才会替换变量
     </resource>

     从这里可以看出,可以配置额外的资源目录,如

     <resource>
      <directory>src/main/xml</directory>
      <includes><include>文件名</include></includes>
      <targetPath>目标路径,默认为target/classes</targetPath>
    </resource>
   </resources>
 </build>

compile:compile

默认绑定到compile阶段,默认行为是编译所有源代码并在构建输出目录存放编译后文件。默认源目录:src/main/java,默认目标目录:target/classes,默认source1.3,默认target1.1

<build>
    ...
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration><!---->
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>

process-test-resources

处理单元测试资源。

test-compile

单元测试编译阶段。目标:compile:testCompile,默认输出目录以及自定义方式类同compile阶段。

Test

大部分生命周期绑定Surefire插件的test目标至test阶段。默认情况下单元测试失败后停止构建,我们可以覆盖这种行为,让构建继续进行(或者直接跳过测试阶段 –Dmaven.test.skip=true):

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
     <configuration>
       <testFailureIgnore>true</testFailureIgnore>
     </configuration>
    </plugin>
    ...
  </plugins>
</build>

Install

Install插件的install目标基本上都是绑定到install生命周期阶段。install:install目标将项目的主要构件安装到本地仓库。

Deploy

Deploy插件的deploy目标通常绑定到deploy生命周期阶段。该阶段将一个构件部署到远程Maven仓库,更新一些可能被此次部署影响的仓库信息。这里详细暂不讨论。



© 著作权归作者所有

共有 人打赏支持
SimpleClean
粉丝 20
博文 29
码字总数 12570
作品 0
宁波
程序员
《maven权威指南》学习笔记(更新中)

转自:http://macrochen.javaeye.com/blog/357308 maven=构建工具+依赖管理+项目生命周期管理 什么是maven插件的目标? maven插件相当于一个功能集合, 而目标就是这个功能集合中的一个子功能(...

肥皂 ⋅ 2011/06/16 ⋅ 0

《Maven权威指南》学习笔记十七_一个多模块项目

场景:父模块包含两个子模块,子模块2依赖子模块1。 父模块POM配置如下例: [...] <packaging>pom</packaging>[...]<modules> </modules><build> </pluginManagement></build>[...]像这样如果......

SimpleClean ⋅ 2013/03/28 ⋅ 0

分享26本关于Jquery的学习书籍(免费下载)

分享26本关于Jquery的学习书籍(免费下载) 1、精通JavaScript+jQuery 2、网友small6分享锋利的jQuery实例源码 3、网友small6分享jQuery权威指南配套源代码 4、犀利开发jQuery内核详解与实践...

邓剑彬 ⋅ 2012/11/30 ⋅ 8

基于maven的ssh框架一步一步搭建(二)

五、配置profile 1、profile是用来做什么的 Profile能让你为一个特殊的环境自定义一个特殊的构建;profile使得不同环境间构建的可移植性成为可能。不同的构建环境是什么意思?构建环境的两个...

漂泊者及其影子 ⋅ 2014/07/16 ⋅ 0

源码圈 365 胖友的书单整理

🙂🙂🙂关注微信公众号:【芋道源码】有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 您对于源码的疑问...

芋道源码掘金Java群217878901 ⋅ 2017/09/21 ⋅ 0

Maven实战读书笔记(8)

何为Maven的生命周期? 1、Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完善的、易扩展的生命周期 2、这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验...

祥林会跟你远走高飞 ⋅ 2014/12/16 ⋅ 0

maven学习笔记

maven环境快速搭建 Maven是一个采用纯Java编写的开 源项目管理工具。Maven采用了一种被称之为project object model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件...

binhu ⋅ 2014/08/04 ⋅ 0

翻译-使用Spring调用SOAP Web Service

原文链接: http://spring.io/guides/gs/consuming-web-service/ 调用SOAP web service 本指南将指导你使用Spring调用一个基于SOAP的web service的整个过程。 指南内容 你将构建一个客户端,使...

无敌西瓜 ⋅ 2014/09/10 ⋅ 0

《Maven权威指南》学习笔记二十_关于POM

英文:Project Object Model;中文:项目对象模型。 项目版本 主版本.次版本.增量版本.限定版本号: <major version>.<minor version>.<incremental version>-<qualifier>一个版本“5”只有主......

SimpleClean ⋅ 2013/04/10 ⋅ 0

免费的编程中文书籍索引

免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 github 上的一个流行的编...

modernizr ⋅ 2014/04/08 ⋅ 24

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 39分钟前 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 44分钟前 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 53分钟前 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 53分钟前 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 54分钟前 ⋅ 0

React Native & Weex 区别

JS引擎 Weex使用V8, React native使用JSCore JS开发框架 ( Js Framework ) Weex基于vue.js(2W+ star)。小巧轻量的前端开发框架,组件化,数据绑定,2.0引入virtual dom。 ReactNative使用...

东东笔记 ⋅ 今天 ⋅ 1

UIkit 分页组件动态加载简单实现

1. 问题描述 使用过UIkit分页组件的都清楚,UIkit的分页不能动态刷新数据,也就是不能在点击下一页的时候,动态从后台加载数据,并且刷新页数以及该页数上的数据,下面是一个简单实现,没有做...

影狼 ⋅ 今天 ⋅ 0

Mobx入门之三:Provider && inject

上一节中<App/>组件传递状态temperatures给children -- <TemperatureInput />,如果组建是一个tree, 那么属性的传递则会非常繁琐。redux使用Provider给子组件提供store, connect将子组件和s...

pengqinmm ⋅ 今天 ⋅ 0

魔兽世界 7.0版本 S23/S24/S25全职业普通+精锐套

  死亡骑士   (联盟)   (部落)   (精锐)   恶魔猎手   (联盟)   (部落)   (精锐)   德鲁伊   (联盟)   (部落)   (精锐)   猎人   (联盟) ...

wangchen1999 ⋅ 今天 ⋅ 0

maven顶级pom和子pom的版本号批量修改

当一个版本发布,新起一个版本时,我们只需要手动修改一下项目中pom.xml的版本号就可以了。但是如果这个maven项目有很多的子模块项目,那么一个个手动的去改就显得费时费力又繁琐了。还好,m...

ArlenXu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部