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

macOS下利用mvnd与IDEA插件加速Maven构建实战 本文详细介绍了在macOS环境下使用mvnd与IDEA插件加速Maven构建的实战方法。通过mvnd的守护进程机制、并行构建和内存缓存技术,显著提升构建效率,实测中型项目构建时间从150秒缩短至53秒。文章涵盖mvnd安装配置、IDEA集成、性能对比及常见问题解决方案,为Java开发者提供高效的构建优化方案。 阅读详情

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

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

%26nbsp;

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

%26nbsp;

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

%26nbsp;

$  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] ------------------------------------------------------------------------

%26nbsp;

%26nbsp;

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

%26nbsp;

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] ------------------------------------------------------------------------

%26nbsp;

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

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

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

%26nbsp;

$  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] ------------------------------------------------------------------------

%26nbsp;

%26nbsp;

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

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

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

最后使用命令如下:

%26nbsp;

$  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] ------------------------------------------------------------------------

%26nbsp;

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

%26nbsp;

参考:

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

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

Maven-mvnd高效构建Java项目 Maven 的优点是稳定可靠,在绝大多数的项目上工作良好,社区生态很完善,几乎所有的 Java 开发者都在用。Maven 的缺点是,对于大一点的项目来说,构建太慢了。有时候只能在服务器端完成构建 ,心酸呀。radle 的优点是足够的灵活,构建速度也会更快一点,因为使用了后台进程和缓存机制。Gradle 的缺点是版本迭代速度太快,社区跟不上,对于初学者来说,还是有一定的学习曲线。 阅读详情

相关推荐

高效使用Java构建工具|Maven篇|云效工程师指北

高效使用Java构建工具|Maven篇。众所周知,当前最主流的Java构建工具为Maven/Gradle/Bazel,针对每一个工具,我将分别从日常工作中常见的场景问题切入,例如依赖管理、构建加速、灵活开发、高效迁移等,针对性地介绍如何高效灵活地用好这3个工具。

BYvonne的博客 4744

Java之maven安装和镜像加速(极速版)

主要参考自maven的下载安装配置教程(详细图文)Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。通俗的讲maven就是专门用于构建和管理项目的工具,他可以帮助我们去下载我们所需要jar包,帮助我们去管理项目结构,帮助我们去实现项目的维护、打包等等...这里提供两种下载方式:官网下载:maven官网下载某度网盘下载:链接:某度网盘下载(3.3.9)提取码:iszd链接:某度网盘下载(3.6.3)提

weixin_38969534的博客 1858

使用Maven构建项目Docker镜像

前言 在前面我们介绍了 Docker是什么?有什么优点?应用场景?_黄嚯嚯-优快云博客 Linux安装Docker步骤_黄嚯嚯-优快云博客 Docker配置使用阿里云加速镜像_黄嚯嚯-优快云博客 准备工作 创建一个基础项目工程 开始之前我们先准备一个Springboot的项目工程 , 就很普通就好 , 确保项目整正常启动即可! 配置 本次构建所使用到的插件是docker-maven-plugin , 该插件提供了两种不同的构建方式 , 两种方式外观差别体现在po...

黄嚯嚯 5559

优化Maven配置:提升Java项目依赖下载速度

优化Maven配置:提升Java项目依赖下载速度

末尾卡片和博主交流学习! 1635

提高Maven构建速度的方法

然而,随着项目规模的增长和依赖项的增加,Maven构建可能变得缓慢,这会影响开发人员的效率。但是,如果项目中的某些依赖项经常被使用,并且不经常发生变化,我们可以将这些依赖项手动安装到本地仓库中,并在项目的pom.xml文件中引用本地仓库的路径。综上所述,通过配置本地仓库镜像、并发构建、增量构建、使用本地依赖解析和缓存等方法,我们可以有效地提高Maven构建的速度。为了加快构建速度,我们可以配置本地仓库的镜像。启用增量构建后,Maven会根据源代码的修改情况,只重新编译需要更新的模块,从而提高构建速度。

CddaDebugging的博客 1139

Java 领域 Maven 的依赖下载加速方法

Maven 作为 Java 生态系统中最主流的构建工具和依赖管理工具,其依赖下载速度直接影响开发效率和 CI/CD 流水线的性能。本文旨在提供一套完整的 Maven 依赖下载加速方法论,覆盖从本地开发环境到企业级部署的各种场景。本文将首先介绍 Maven 依赖管理的基本原理,然后深入分析影响下载速度的因素,接着详细讲解各种加速方法,最后提供实际案例和性能对比。Maven:Apache 的构建自动化工具,主要用于 Java 项目POM。

AI开发架构师 982

Maven构建项目过慢的4中解决方案

Maven构建项目过慢的4中方法

个人学习笔记库,一篇一篇记录成长的足迹 2618

Maven学习总结(57)—— 如何提高 Maven 的构建速度?maven-mvnd 又是什么鬼?

前言 Maven 经常被拿来和 Gradle 做对比,最大的劣势之一就是 Maven 构建慢,Gradle 比 Maven 构建速度快 2 到 10 倍,而如今 Maven 也可以更快了。Apache Maven 团队从 Gradle 和Takari(Maven 生命周期优化器Takari:http://takari.io/book/40-lifecycle.html)中获得灵感对 Maven 进行了强化,衍生出maven-mvnd项目。 Gradle 是一个基于 Apache Ant 和...

科技D人生 1978

解决maven加载依赖慢的问题

1. 找到maven解压包的路径(D:\Program Files\apache-maven-3.5.4\conf)2. 打开settings.xml文件,修改maven仓库路径和依赖下载镜像。(1)windows左下角搜索“系统环境变量”(2)添加阿里云下载镜像(提升依赖下载速度)(4)在path中添加maven的环境变量。(3)新建M2_HOME环境变量。(1)win+R打开,输入cmd。(1)修改maven仓库。(2)输入mvn -v。3. 在环境变量中添加M2_HOME。

weixin_53492344的博客 1248

机器人C++开源库The Robotics Library (RL)使用手册(三)

进入VS工程,我们先看看这些功能函数及其依赖库的分布关系:rl命名空间下,主要有八大模块。搞定VS后将逐个拆解。

qq_34839823的博客 1738

单波束与多波束声呐:从原理到应用场景的全面解析

本文全面解析了单波束与多波束声呐的工作原理、核心特点及应用场景。单波束声呐如精准的狙击手,适合高精度需求;多波束声呐则像高效的散弹枪,适用于快速测绘和大面积覆盖。文章还提供了选型指南和前沿发展趋势,帮助用户根据预算和需求选择最适合的声呐技术。

weixin_30872157的博客 222

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

注意:所有的编译、打包、部署全部是通过Jenkins完成的。 公司内部有一个项目,开始做的时候已经预计到会有很多客服端。所以开发就搞了如下的结构: fft-api # 公用的API,所有的程序都必须使用 fft-client-hubei # 湖北客户端 fft-...

chuifuhuo6864的博客 105

如何快速学习 PHP 编程:从入门到实战的高效路径

PHP高效学习路线摘要:4-8周掌握Web开发核心技能。阶段1(1周)搭建XAMPP/MAMP环境,掌握基础语法和变量处理;阶段2(2周)重点学习表单处理、会话管理和PDO数据库操作(防SQL注入);阶段3(2-3周)实战开发个人博客等小项目。关键原则:边学边练(每个知识点配3-5个案例)、优先掌握Web刚需技能(HTTP请求、数据库、动态页面)、善用官方手册。避坑点:密码必须加密、SQL使用预处理、统一UTF-8编码。建议每天2-3小时实操,通过项目驱动学习,快速形成开发能力。

2501_94233638的博客 1389

Maven构建加速

Maven构建加速

兮动人 1179

Aurix TC3XX Cache memory分析

Aurix Cache memory 分析

qwe0405080615的博客 4355

【ubuntu24.04】auto remove后,重启,kernel panic ,please reboot your computer vfs unable to mount root fs

Ubuntu 24.04系统在运行auto remove后出现内核恐慌(kernel panic)无法启动,显示"VFS: unable to mount root fs"错误。该问题是由于当前内核被清除导致系统无法挂载根分区。解决步骤包括:1)尝试用GRUB菜单中的旧内核启动;2)在GRUB中临时编辑启动参数;3)使用Ubuntu启动盘进行chroot修复;4)使用Boot-Repair工具一键修复。成功启动后,需要重新安装linux-generic等元包,重建initramfs并更新

突围 1217

如何加速Maven构建

  Maven是比较流行的java构建工具,Maven的常见问题可能包括依赖冲突、缓存解析,以及构建时间缓慢。为什么Maven构建花费的时间比它应该花费的时间更长,如何改进。下面是对Maven缓慢构建进行故障排除的四个技巧。   1. Maven中的并行构建   默认情况下,Maven不会利用硬件的全部功能。它按顺序而不是并行地构建所有模块。但是,项目设置通常不要求是连续的。通常,您可以命令Maven分析项目,包括依赖关系图,并在可能的情况下并行构建项目。您可以指定用于构建项目的确切线程数,也可以使用参

yueqian_edu的博客 1346

蓝凌EIS智慧协同平台frm_form_upload.aspx接口存在任意文件上传漏洞

蓝凌EIS智慧协同平台frm_form_upload.aspx接口存在任意文件上传漏洞

nnn2188185的博客 357

Maven加速编译技巧

maven编译加速

赵英超的博客 5372

RK3588网卡出现丢包或者带宽不足的问题验证排查

注意除了有最大的TCP数据接收缓冲,还有/proc/sys/net/core/wmem_max — 最大的TCP数据发送缓冲可以调整,这里暂时没用到,针对具体需要可适当调整。比如把ethx接口中断从默认的cpu0迁移到其它cpu,例如将eth0中断234移到cpu7 (10是16进制, cpu0 =3588的cpu有8个核,4个A55(小核)+4个A76(大核),可以找到对应中断 将中断从默认cpu0核切到cpu7。tcp_rmem:单位是字节,接收缓存区大小,缓存从对端接收的数据,后续会被应用程序读取。

Android/Linux驱动开发传帮带学习,让驱动入门门槛更低! 2030

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Maven - 构建速度优化 从10分钟到1分钟的实战技巧

本文分享Maven构建速度优化的实战技巧,帮助开发者将构建时间从10分钟缩短至1分钟。主要内容包括: 并行构建:使用-T参数启用多线程并行构建,大幅缩短多模块项目的构建时间 跳过无用阶段:通过参数跳过测试、文档生成和静态检查等非必要流程 使用Maven Daemon(mvnd):采用守护进程模式消除JVM启动开销 依赖优化:配置国内镜像源加速依赖下载,合理管理本地仓库缓存 文章通过性能对比图、代码示例和实测数据,展示了各种优化方法的效果,并提供了官方文档链接。这些技巧可显著提升开发效率和CI/CD流水线速度

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: PYTHON框架之DJANGO学习笔记(十二)
下一篇: PYTHON框架之DJANGO学习笔记(十四)
lin91o7c
博客等级 码龄12年 1粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值