注意:所有的编译、打包、部署全部是通过Jenkins完成的。

公司内部有一个项目,开始做的时候已经预计到会有很多客服端。所以开发就搞了如下的结构:

fft-api    # 公用的API,所有的程序都必须使用
fft-client-hubei # 湖北客户端
fft-job # 定时任务
fft-persistent # 数据库连接层
fft-persistent-api # 数据库连接层API
fft-server # 公用服务端。所有的客户端都连接服务端,服务端去连接数据库连接层。
pom.xml # 父级pom文件,定义通用的配置

最开始的时候。因为项目简单,所以直接全部编译打包。然后从一堆产物中获取需要的产物进行部署。

$  clean deploy  -B -e -U -Dmaven.test.skip=true

# 反应堆输出日志如下:

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] Froad FFT  # 注意日志中这个父级pom.xml的变化
[INFO] FFT Api
[INFO] FFT-Persistent-Api
[INFO] FFT Server
[INFO] FFT Client HuBei
[INFO] FFT-Persistent
[INFO] FFT Job
[INFO]
[INFO] ------------------------------------------------------------------------

随着项目的持续接入,项目结构如下:

fft-api    # 公用的API,所有的程序都必须使用
fft-client-hubei # 湖北客户端
fft-client-chongqing # 重庆客户端
fft-client-dezhou # 德州客户端
fft-client-jiangxi # 江西客户端
fft-client-jining # 济宁客户端
fft-client-lingxian # 陵县客户端
fft-client-neimenggu # 内蒙古客户端
fft-client-shandong # 山东客户端
fft-client-shiyan # 湖北十堰客户端
fft-job # 定时任务
fft-persistent # 数据库连接层
fft-persistent-api # 数据库连接层API
fft-server # 公用服务端。所有的客户端都连接服务端,服务端去连接数据库连接层。
pom.xml # 父级pom文件,定义通用的配置 # 反应堆输出日志如下: [INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] FFT PARENT
[INFO] FFT Api
[INFO] FFT-Persistent-Api
[INFO] FFT Server
[INFO] FFT Client ChongQing
[INFO] FFT Client JiangXi
[INFO] FFT Client JiNing
[INFO] FFT Client HuBei
[INFO] FFT Client NeiMengGu
[INFO] FFT Client ShanDong
[INFO] FFT Client DeZhou
[INFO] FFT Client LingXian
[INFO] FFT-Persistent
[INFO] FFT Client ShiYan
[INFO] FFT Job
[INFO]
[INFO] ------------------------------------------------------------------------

在后来的使用过程中发现,原来的命令已经不能满足我们的需要了。原因如下:

  1. 全部编译、打包、上传私服库、部署到tomcat非常耗时。
  2. 其中任何一个出错都会自动停止,需要等待开发修正。

所以想起了学习Maven时看见的裁剪反应堆。经过一段时间的折腾,使用命令如下:

$  clean deploy  -B -e -U -Dmaven.test.skip=true -pl fft-api,fft-client-shiyan  # 其他客户端相同,这儿就用十堰客户端代表。

# 反应堆输出日志如下:

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] # 反应堆中并没有Froad FFT这个父级pom.xml
[INFO] FFT Api
[INFO] FFT Client ShiYan
[INFO]
[INFO] ------------------------------------------------------------------------

使用此命令后,速度提升非常大。原本要5分多钟的构建,现在直接缩短到1分钟内。

但是某天整体升级版本号到2.0.0后,依赖fft-api的管理平台程序始终无法构建。查询报错信息后发现是私服库没有2.0.0的父级pom.xml。

仔细查询Jenkins日志发现,父级pom.xml没有上传。因为我裁剪的反应堆只有fft-api,fft-client-shiyan俩个子模块,所以父级pom.xml是不会上传的。

最后使用命令如下:

$  clean deploy  -B -e -U -Dmaven.test.skip=true -pl -am

# -am 将自动构建fft-client-shiyan模块所依赖的其他模块

# 反应堆输出日志如下:

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] FFT PARENT
[INFO] FFT Api
[INFO] FFT Client ShiYan
[INFO]
[INFO] ------------------------------------------------------------------------

最后,这个问题完美解决了。

参考:

http://www.cnblogs.com/zz0412/p/3767146.html

http://books.sonatype.com/mvnref-book/reference/_using_advanced_reactor_options.html

工作随笔——一次简单的Maven加速构建实战的更多相关文章

  1. 构建简单的Maven工程,使用测试驱动的方式开发项目

    构建简单的Maven工程很简单,这里写这篇随笔的原因是希望自己能记住几个小点. 一.安装Maven 1.下载maven:https://maven.apache.org/download.cgi 2. ...

  2. 第一个简单的maven项目

    学习一个新的东西,最快的方式就是实践.所以我们也不用多说什么了,直接拿一个项目来练手.下面的整理取自maven权威指南,在一堆maven资料中,我觉得这本书写的最好. 简介 我们介绍一个用Maven ...

  3. 装服务器,测试数据库,简单的maven命令

    [说明]今天总体回顾一下:大概是早上装服务器,下午测试数据库,晚上了解简单的maven命令 一:今日完成 1)在远程服务器的tomcat 设置好管理员的登录账号 2)登录tomcat 的项目管理 查看 ...

  4. myeclipse(2015)中创建简单的Maven项目的步骤(用于生成可执行jar文件)------》myeclipse2015

    利用MyEclipse的引导,可以很方便的创建简单的.用于生成可执行jar文件的Maven项目: 1.New -> Project... 选择 Maven Project, 点击Next > ...

  5. 阿里云maven加速和docker加速

    maven加速 maven仓库用过的人都知道,国内有多么的悲催.还好有比较好用的镜像可以使用,尽快记录下来.速度提升100倍. http://maven.aliyun.com/nexus/#view- ...

  6. maven入门(1-3)构建简单的maven项目

    1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: mvn archetype:generate -DgroupId=com.mycompany.app -Dartifac ...

  7. 创建一个简单的maven的web程序

    最近学习Hadoop,发现学习要想用hadoop作为后台运行web程序,必须应用maven,所以学习了今天学习了一下maven,然后搭建了一个简单的web程序 首先我使用的是eclipse中自带的ma ...

  8. 简单的maven项目

    手动建立一个简单的maven项目,不使用eclipse 好吧,第一步:建立一个项目路径,比如在d盘新建一个mavenTest文件夹,在mavenTest文件夹中建立HelloMaven的文件夹,作为项 ...

  9. 图文介绍MyEclipse (2015) 中创建简单的Maven项目的步骤(用于生成可运行jar文件)

    利用MyEclipse的引导,能够非常方便的创建简单的.用于生成可运行jar文件的Maven项目: (原创文章,转载请注明转自Clement-Xu的博客:http://blog.csdn.net/cl ...

随机推荐

  1. CocoaPods安装以及相关问题解决

    Mac OS X上安装 Ruby环境 安装RVM $ curl -L https://get.rvm.io | bash -s stable 关闭终端,新开另外一个终端(新打开的终端会自动载入RVM环 ...

  2. HashMap vs TreeMap vs Hashtable vs LinkedHashMap

    Map是一个重要的数据结构,本篇文章将介绍如何使用不同的Map,如HashMap,TreeMap,HashTable和LinkedHashMap. Map概览 Java中有四种常见的Map实现,Has ...

  3. Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)

        开发任何软件,如何管理依赖是一道绕不过去的坎,软件开发过程中,我们往往会使用这样那样的第三方库,这个时候,一个好的依赖管理就显得尤为重要了.作为一个自动构建工作,Gradle对依赖管理有着很好 ...

  4. Java并发之ScheduledExecutorService(schedule、scheduleAtFixedRate、scheduleWithFixedDelay)

    package com.thread.test.thread; import java.util.Timer; import java.util.TimerTask; import java.util ...

  5. Linux和开源已经在2013年开始悄悄主宰世界?

    提到Linux,很多人觉得它依旧不温不火,实际上在这个即将过去的一年,Linux和开源软件已经悄悄主宰了计算领域的各方面,这具体表现在开源项目遍地、Chromebook崛起、SteamOS备受瞩目、A ...

  6. height:100%不起作用(无效),div全屏

    当父容器是body时,height:100%不起作用(无效),解决办法:在css代码段中添加 html, body{ margin:0; height:100%; } 实现div全屏的时候需要上面那段 ...

  7. 理解 OpenStack + Ceph (7): Ceph 的基本操作和常见故障排除方法

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  8. 荒芜的周六-PHP之面向对象(三)

    hi 又是开森的周六了.积攒的两周的衣服,终于是差不多洗完了.大下午的才来学点东西~~ 1.PHP面向对象(三) 四.OOP的高级实践 4.3 Static-静态成员 <?phpdate_def ...

  9. MMORPG大型游戏设计与开发(客户端架构 part4 of vegine)

    昨天是七夕,祝大家都过的快乐,希望这句迟到的问候不会造成大家心中的困扰.这一节讲到了前端比较重要的模块,性能以及调试异常模块.一个应用的性能往往是最核心的部分,就像人身体的各个器官一样,一小部分也不能 ...

  10. C#学习笔记-Windows窗体基本功能(Login登录界面)

    本菜鸟由于实习工作的原因,不得不快速接触C#语言,刚刚好又要做毕业设计,所以就通过自学的方式一举两得地完成这两件事情. 故此文字记录或代码中的各种文件名之类均是以毕业设计为模版记录的,看着不方便之处请 ...