• 工作随笔——一次简单的Maven加速构建实战


    注意:所有的编译、打包、部署全部是通过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

  • 相关阅读:
    JS 函数—函数内部:arguments、this、,caller、new.target
    JS—函数概述
    Number API
    Object-API—02
    03构建之法阅读笔记之一
    4月第二次每周总结(4月15日)
    电梯演讲
    个人作业3—折线图
    个人作业3—china.jsp设置页面
    每周总结(4月8日)
  • 原文地址:https://www.cnblogs.com/zz0412/p/4013086.html
Copyright © 2020-2023  润新知