文档章节

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

SimpleClean
 SimpleClean
发布于 2014/02/19 11:19
字数 1196
阅读 934
收藏 10

解释:

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

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
博文 30
码字总数 12570
作品 0
宁波
程序员
《maven权威指南》学习笔记(更新中)

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

肥皂泡2
2011/06/16
0
0
《Maven权威指南》学习笔记十七_一个多模块项目

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

SimpleClean
2013/03/28
0
0
分享26本关于Jquery的学习书籍(免费下载)

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

邓剑彬
2012/11/30
3.2K
8
基于maven的ssh框架一步一步搭建(二)

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

漂泊者及其影子
2014/07/16
3.6K
0
源码圈 365 胖友的书单整理

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

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
59分钟前
0
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
0
0
spring EL 和资源调用

资源调用 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.Resource;......

Canaan_
今天
1
0
memcached命令行、memcached数据导出和导入

一、memcached命令行 yum装telnet yum install telent 进入memcached telnet 127.0.0.1 11211 命令最后的2表示,两位字节,30表示过期时间(秒) 查看key1 get key1 删除:ctrl+删除键 二、m...

Zhouliang6
今天
0
0
Linux定时备份MySQL数据库

做项目有时候要备份数据库,手动备份太麻烦,所以找了一下定时备份数据库的方法 Linux里有一个 crontab 命令被用来提交和管理用户的需要周期性执行的任务,就像Windows里的定时任务一样,用这...

月夜中徘徊
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部