工作经验——一次简单的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

时间: 2024-10-17 06:00:52

工作经验——一次简单的Maven加速构建实战的相关文章

为什么你有十年工作经验,却成不了专家?

有很多读者问李叫兽:为什么你年纪不大,经验并不多,但却能擅长复杂的商业策略和文案写作,是如何做到的? 因此,本文就来回答这个问题:如何成为任何一个领域的专家. 如何成为一个领域的专家?有人说主要靠经验,有人说靠天赋,但是大量的研究发现:不论是经验还是天赋,都不是成为专家的关键因素.经验并不能让你成为专家.任何一个工作10年的人都很有经验,但是他们大部分并没有做到领域内专家.NSEAD商学院有一项研究发现:比起只有少量经验的人,大体而言,更有经验的管理者并没有产生高效的效果.天赋也不能让你成为专家

Java后端程序员1年工作经验总结

java后端1年经验和技术总结(1) 1.引言 毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西.这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼.遂决定梳理一下自己所学的东西,为大家分享一下. 经过一年意识到以前也有很多认识误区,比如: 偏爱收集,经常收集各种资料视频塞满一个个硬盘,然后心满意足的看着容量不行动. 不重基础,总觉得很多基础东西不需要再看了,其实不懂的地方很多,计算机程序方面任何一个结果都必有原因

为什么有些人用一年时间获得了你十年的工作经验?

在职场上你会遇到一些人,乍看之下他们其貌不扬.出身学历可能也并不好,但他们就是职位比你高.能力比你强.得到老板更多的青睐. 他们到底靠什么占领职场?为什么别人用一年的时间可以获得你工作十年的经验和能力? 核心的潜在能力是这两点——终身学习和Hacking大脑.如果你也想获得这些,这篇文章你必须读读,会很有趣. 我一直喜欢跟优秀的人来往,和非常优秀的人工作,因为我是一个非常懒惰的人,而我知道跟非常优秀的人工作的时候心情可以非常愉快. 优秀人才的特征:极强的学习能力必不可少 那我自己创业的时候呢,我

几年工作经验的我,到底应该具备哪些能力

1.外包公司 每一次刷一次简历,最早接到的公司的电话,都几乎是毫无疑问是来自外包公司.据我了解,很多从公司出去的人,也都去了外包公司,这让我有一种错觉,是不是我的下一份工作也是外包公司.每一次接到这种电话,我都觉得是一种诱惑,但莫名其妙也一直坚持到现在.这让我总结一个经验:想去哪家公司,直接投简历,有一定工作经验的人,不需要再海投了. 2.非IT类公司 有一次,有一家公司也找我,他们是一家服务类的公司,可能找外包公司做了一个系统,现在需要人员来维护,就想招聘一个人来维护,这样的公司也是够牛的,就

3年工作经验程序员应有的技能

每个程序员.或者说每个工作者都应该有自己的职业规划,如果看到这里的朋友没有自己的职业规划,希望你可以思考一下自己的将来... 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章.这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Java程序员的. 简单先说一下,LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2B事业部的面试,成都web前端培训一共有面试了有6家公司(因为LZ不想请假,因此只是每个晚上去其他

为什么有些人能用一年获得你三年的工作经验?

有人说:一晃眼毕业已经三五年有余,回首再看一路走来的磕磕绊绊,如果在当时有人告诉过他一些职场建议,也许自己可以少走许多弯路. 无论你是工作N年的职场大咖,还是刚出校园的职场菜鸟,都该看看这篇文章:工作三年后,悟出了哪些职场道理? 本文作者为LinkedIn领英专栏作家小川叔:只聊职场.不写故事的萌叔,骂过无数职场迷茫之人依旧被大家爱着,最近出版<努力,才配有未来>. 工作前三年有多重要呢? 1996年,Google创始人拉里·佩奇遇到了谢尔盖·布林,两人开始合作研究一名为“BackRub”的搜

如何在三个月内获得三年的工作经验

在多年的工作生涯中,总会目睹一批人的升职像火箭速度一样. 而总有一批人,就像蜗牛一样,工作岗位和职位几乎从来不变. 我们看看,2个名人的快速成长史. 一个是教英语的李阳,他读大学时成绩不好,英语不及格,然后他做什么去了?他跑到没人的地方大声喊英语去了. 一个是做广告的叶茂中,他卖广告卖不出去了,他跑回家写书.别人看到的和他自己说的是拿着书出版出了名,发达了.其实做过这个事的人才会知道,当他把这本书写出来时,能不能出版已经不重要的,因为他知道他变化了. 成长是有方法的. 适当的理论方法指导,加上狠

可以让你少奋斗10年的工作经验

题记:   这是从网上下的,不知道是哪位大牛写的,非常不错. 第一:不要认为停留在心灵的舒适区域内是可以原谅的.  每个人都有一个舒适区域,在这个区域内是很自我的,不愿意被打扰,不愿意被push,不愿意和陌生的面孔交谈,不愿意被人指责,不愿意按照规定的时限做事,不愿意主动的去 关心别人,不愿意去思考别人还有什么没有想到.这在学生时代是很容易被理解的,有时候这样的同学还跟“冷酷”“个性”这些字眼沾边,算作是褒义.然而相反,在工作之后,你要极力改变这一现状.否则,你会很快变成鸡尾酒会上唯一没有人理睬

浅谈程序员的薪资和工作经验

很多人都会问关于PHP/Java程序员薪资与工作经验年限的内容,无论是在就业论坛的评论还是作为网上流传的指导性文章,都会涉及这方面的问题.例如, 有人知道3年Java/ JEE工作经验的工资是多少吗? 本人拥有10年Java/ JEE工作经验并且懂Spring.Struts和Hibernate,提多少薪水比较合适? 请发我一些关于拥有多年经验的面试问题,谢谢. 对于那些只有一两年工作经验的入门新手,讨论这个问题或许还有点意义.但是要你已经有至少3年以上的工作经验,那答案就非常主观了,这完全取决于