`

《转》为什么要抛弃maven

 
阅读更多

项目需要,开始学习maven,今天花了一整天的时间,看完了《Maven实战》这本书。书是好书,看完之后,对maven整体有了较多的了解,也知道了在项目中怎么去使用,感觉收获很大。

我感觉maven这一套还是很严谨的,虽然繁杂,但是感觉很规范,各种情况它都考虑到了。而且跟Jenkins结合起来,也是很方便的。我想不到还有什么更好的办法可以解决它所要解决的问题。

突然想到:为什么我以前不喜欢用maven?为什么似乎人们也不喜欢maven呢?

我不喜欢是因为我以前没有掌握maven,看到那大堆的xml,总有种无法下手的感觉。而且在使用中时老是遇到问题,却很难在短时间内找到答案。总觉得它太笨重了。

今天看完书也证实了我之前的看法是正常的。maven设计了一套复杂的体系,比如库的坐标、依赖、生命周期、插件等,环环相扣,如果不把这一套东西 都搞明白,是没法下手的。这种情况,跟angularjs很像,都是设计了一套相对封闭但又有特色的体系,虽然内部配合很好,但对于外界就没那么友好了。 在花时间了解、适应、认同它之前,会经常撞墙的。

但为什么人们也不喜欢maven呢?应该有很多人对maven很熟悉的,但为什么他们还在寻找更好的工具呢?比如buildr,比如gradle?

今天带着疑问,我搜索了一些文章,大概明白了。

首先要提一下ant,ant与maven是两个极端。ant很灵活,如同瑞士军刀,但没有统一的流程,需要写很多的代码,且每个人都有自己的一套。而maven则相反,定义了严谨、繁琐的流程,考虑了很多,但具体到某一个任务的时候,又不够灵活。要么你去搜别人写好的插件,要么自己写,不论哪种方式,都会让人觉得束手束脚,感觉被maven设计出来的锁链绑着。一想到随便来点什么都要上插件,让人压力巨大。

看到thoughtworks以前有一篇讲maven的文章,提到说,对于构建工具,在plugin的层面上抽象,还是不够灵活。还是需要一种能语言层面上抽象的工具。比如buildr,比如gradle。(原文找不到了,这是我根据搜到的片断自己理解的)

而gradle正好填上了这两个极端的中间。它利用groovy提供的dsl,写起来要比xml舒服很多,而且可以直接如果函数调用般调用ant提供的工具,还可以直接写groovy(Java)代码。相比ant/maven,人们反映使用它的感觉要舒服多了。

希望这个项目有机会尝试一下gradle。


更新:

想不到这篇不太有营养的文章上了“tw好声音”。正好这几天在志恒同学的努力下,成功的把项目中的maven换成了gradle,所以赶紧上来补充两句。

首先关于maven,大家可以看看评论中杨博这篇霸气的文章:《如果我来设计Maven》,深度有营养。

然后讲讲项目的情况。

客户的项目是一个java项目,用maven管理。虽然代码不多,但是分成了好几个模块。在根目录下放一个总的POM.xml,然后每个子模块里一个POM.xml,包含在总POM里。这几个月我们一直在它的甚础上开发,对它进行了多次修补,感觉如下:

  1. 运行慢。运行一次<code>mvn clean test</code>,差不多要五分钟时间,够上个厕所泡杯水再聊聊天了。而且每多一个模块,就会多出一截时间。
  2. 日志乱。maven的日志真是超乱,非常难以阅读。每次出点问题想从日志里找线索,都是一场折磨
  3. 文档难。遇到问题想从maven官网上找点资料,感觉很难。满屏幕都是文字,为什么看不到自己需要的?
  4. 插件烦。P大的一点事也要加插件!比如,我们想建个跟src平级的integationTest目录,也要下插件!一堆配置!
  5. 心情差。每次编辑POM、看到POM、甚至想到POM,都感觉压力巨大,直接影响写代码心情~

前些天终于要开始开始一个新模块了,志恒同学实在忍不住,喊出“风险我担!周末加班我也干!”的壮语后,花了两天时间,不仅在新模块里配好了gradle,还把之前多个maven模块也换好了,包括POM里调用的所有插件。在此向志恒同学致敬:)

现在的gradle脚本看起来舒服多了。代码简洁、结构清晰、配置简单,再配上它的吉祥色绿色,有种春风拂面的感觉:

  1. gradle代码是由groovy写成的dsl,写起来有种json的感觉,简洁清晰,一句废话都很难找到。
  2. 文档很好。由于gradle语法不像XML那样能提示,所以它的网站文档很好。清晰、解释清楚,示例丰富,很有帮助
  3. 插件丰富。gradle内置了对ant任务的支持,表示各种ant任务你都可以直接拿过来用。并且在gradle里,可以用一种很简洁的语法去调用它们,像调用函数一般
  4. 功能强大。gradle代码实际上就是groovy代码,所以可以方便地嵌入groovy代码。你既可以在里面加个println "hello"什么的帮助调试,又能写一些较复杂的groovy代码实现一些复杂的功能。既强大,又灵活。如果需要,不要怕学习另一门语言,因为比起你“精通maven”所花费的时间精力可要少多了。

由于项目保密的原因,不方便贴出实际代码,不过在网上应该可以搜到很多maven与gradle代码的对比例子。我个人感觉因为有了gradle,groovy终于有了一个杀手级的项目。

等在项目中有更多的gradle使用经验时,再来更新。

分享到:
评论

相关推荐

    Matlab基础与应用获奖课件.pptx

    Matlab基础与应用获奖课件.pptx

    铁路订票平台 2025免费JAVA微信小程序毕设

    2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。

    深部应力环境模拟中pfc-flac耦合代码的应用与实现

    内容概要:本文详细介绍了pfc-flac耦合代码在深部应力环境中模拟巷道和煤层开挖的应用。pfc-flac耦合代码将颗粒流(PFC)和有限差分法(FLAC)相结合,分别用于微观颗粒间相互作用和宏观应力应变问题的处理。文中展示了具体的Python代码片段,解释了如何生成颗粒模型、定义接触模型、创建模拟区域、设置初始应力状态以及实现数据交换。此外,还讨论了耦合代码在处理煤岩损伤演化、开挖步进控制等方面的优势,并提供了实际应用中的优化建议和技术难点。 适合人群:从事岩土工程、矿山开采等领域研究的技术人员和科研工作者。 使用场景及目标:①模拟深部应力环境下的巷道和煤层开挖过程;②研究岩体应力重分布及其对开挖的影响;③提高模拟精度,更好地预测岩层破坏形态。 其他说明:尽管pfc-flac耦合代码在深部应力环境模拟中有显著优势,但也存在一些挑战,如内存消耗较大等问题。文中提到了一些优化措施,如调整参数以节省内存开销等。

    电力系统基于谐波线性化的阻抗建模与稳定性分析:考虑锁相环影响的逆变器输出阻抗模型设计及应用

    内容概要:文章详细阐述了阻抗建模过程,分为不考虑锁相环影响和考虑锁相环影响两种情况。不考虑锁相环时,基于电路拓扑结构列出方程,通过谐波线性化方法建模,并将电流基频分量及其正负序谐波分量进行傅里叶变换至频域,再变换至dq坐标系下,最终求得正负序输出阻抗。考虑锁相环影响时,重点在于锁相环对abc坐标系向dq坐标系转换的作用,以及谐波分量对锁相环角度的影响,通过引入传递函数,推导出正负序谐波电压分量到输出扰动角的传递函数,进而求得更精确的输出阻抗。此外,还介绍了稳定性分析,通过诺顿等效和戴维南等效,依据奈奎斯特稳定判据确保系统稳定。 适合人群:电力电子、自动化等相关专业的研究人员和技术人员,尤其是对电力系统建模与稳定性分析感兴趣的读者。 使用场景及目标:①用于研究并网逆变器的阻抗特性;②提高对锁相环在电力系统中作用的理解;③为电力系统的稳定性分析提供理论支持。 阅读建议:本文涉及较多数学公式和专业术语,建议读者先掌握基本的电力系统理论和控制理论基础知识,结合相关文献深入理解公式推导过程。

    SpringBoot的租房系统,你看这篇就够了(附源码)

    SpringBoot的租房系统,你看这篇就够了(附源码)

    MapGIS地质图件一般统一规定.doc

    MapGIS地质图件一般统一规定.doc

    MATLAB/Simulink中800V直流母线311V交流输出的VSG虚拟同步发电机控制详解

    内容概要:本文详细介绍了如何在MATLAB/Simulink中搭建和调试800V直流母线、311V交流输出的虚拟同步发电机(VSG)控制系统。首先,文章解释了VSG的基本概念及其重要性,接着深入探讨了功率计算模块、机械方程模块和电压环控制的具体实现方法。文中提供了多个关键公式的代码实现,并强调了调试过程中需要注意的关键参数和常见错误。此外,还分享了一些实践经验,如避免过度调制、设置合理的虚拟惯量和阻尼系数、以及进行负载突变测试的方法。 适合人群:从事电力电子、电力系统仿真研究的技术人员,尤其是有一定MATLAB/Simulink基础的研发人员。 使用场景及目标:适用于需要理解和实现虚拟同步发电机控制系统的科研项目和技术开发。目标是帮助读者掌握VSG的工作原理和实现方法,提高仿真和实际应用的成功率。 其他说明:文章不仅提供了详细的理论推导和代码实现,还结合了大量的实践经验,使读者能够更好地应对实际工程中的挑战。同时,提醒读者在实际应用前进行全面的极端工况测试,确保系统的稳定性和可靠性。

    智慧校园管理系统 2025免费JAVA微信小程序毕设

    2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。

    PLC关键工程师现场调试步骤.doc

    PLC关键工程师现场调试步骤.doc

    PCCAN接口解决专题方案.doc

    PCCAN接口解决专题方案.doc

    电力传输领域中110kV三相高压电缆对地面人体电磁场影响的COMSOL仿真分析

    内容概要:本文详细介绍了如何使用COMSOL软件对110kV三相高压电缆周围的电磁场进行建模和分析,探讨其对人体的影响。主要内容包括:建立电缆和人体的几何模型,选择适当的物理场模块并设置相关参数,进行精细的网格划分,以及最终求解和结果分析。文中不仅提供了具体的MATLAB和Java代码片段,还讨论了实际工程中需要注意的关键细节和技术难点,如电流密度、磁场强度的计算,网格划分策略,求解器设置等。通过对电场和磁场分布的深入分析,得出电缆周围电磁场对人体的具体影响及其安全性评价。 适合人群:从事电力系统设计、电磁兼容性研究的专业人士,以及对电磁场仿真感兴趣的科研工作者。 使用场景及目标:适用于电力设施建设前期的电磁环境评估,帮助工程师优化电缆布局,确保电磁辐射在安全标准范围内,保障公共健康。此外,也可作为教学案例,帮助学生掌握电磁场仿真技术和COMSOL软件的应用。 其他说明:文章强调了实际工程应用中的注意事项,如材料参数的选择、网格划分的合理性、求解器配置等,这些都是确保仿真结果准确性的重要因素。同时,通过具体实例展示了如何利用COMSOL进行复杂电磁场问题的研究,为相关领域的进一步探索提供了宝贵的经验和参考。

    【数学建模竞赛】“妈妈杯”全国大学生数学建模竞赛:参赛指南与备赛经验分享

    内容概要:“妈妈杯”是全国大学生数学建模竞赛的俗称,由中国工业与应用数学学会(CSIAM)主办。该竞赛面向全国普通高校全日制在校本科生和研究生,通常于每年11月左右举行。比赛形式为团队赛,每队3人,在规定时间内完成数学建模题目并提交论文。竞赛题目涉及实际问题,要求参赛者运用数学建模、计算机编程和论文写作能力解决问题。文中详细介绍了比赛的报名方式、备赛经验和往届题目。报名时间为每年10月左右,费用约为200~400元/队。备赛建议包括团队分工、核心技能提升、赛前模拟训练等方面。往届题目涵盖社会热点问题,如城市垃圾分类、新能源汽车充电桩布局等。 适合人群:全国普通高校全日制在校本科生和研究生,尤其是对数学建模感兴趣的学生。 使用场景及目标:①了解“妈妈杯”全国大学生数学建模竞赛的具体情况,包括主办单位、参赛对象、比赛时间和形式;②掌握比赛的报名方式、费用和官方信息渠道;③学习备赛经验和技巧,如团队分工、核心技能提升、赛前模拟训练;④参考往届题目和社会热点问题,为参赛做好充分准备。 阅读建议:此资源详细介绍了“妈妈杯”全国大学生数学建模竞赛的各个方面,从比赛基本信息到备赛经验都有覆盖。建议参赛学生仔细阅读,结合自身情况进行团队分工和技能提升,并关注官方渠道以获取最新信息。

    Linux操作系统试验基础指导书.doc

    Linux操作系统试验基础指导书.doc

    永磁同步电机非奇异快速终端滑模速度控制(GFTSMC)仿真及其应用

    内容概要:本文详细介绍了永磁同步电机(PMSM)采用非奇异快速终端滑模控制(GFTSMC)进行速度控制的方法和仿真结果。首先解释了传统PI调节器和滑模控制存在的问题,特别是抖振和收敛速度慢。接着展示了GFTSMC的核心设计思路,包括滑模面设计、控制律实现以及参数选择。文中提供了具体的MATLAB代码片段,用于实现滑模面和控制律,并讨论了如何通过调整参数来优化性能。仿真结果显示,在负载突变情况下,GFTSMC相比传统方法表现出更快的响应时间和更低的抖振水平。此外,作者还分享了一些调试经验和注意事项,如使用sigmoid函数减少抖振、设置合理的参数范围等。 适合人群:从事电机控制系统研究与开发的技术人员,尤其是对永磁同步电机有深入了解并希望提高其抗扰能力和响应速度的研究者。 使用场景及目标:适用于需要高性能速度控制的应用场合,如无人机电调、电动汽车驱动系统等。目标是实现快速响应的同时确保系统的稳定性和平滑性。 其他说明:文中提到的实际案例基于3kW永磁同步电机的实验数据,强调了理论与实践相结合的重要性。同时指出,尽管GFTSMC表现优异,但在实际应用中仍需考虑电机参数辨识的准确性,以避免因参数失配导致的性能下降。

    基于COMSOL的煤矿瓦斯抽采数值模拟:变渗透率模型与煤体变形耦合效应研究

    内容概要:本文详细介绍了利用COMSOL进行煤矿瓦斯抽采数值模拟的方法,特别是变渗透率模型与煤体变形之间的耦合效应。文章首先解释了如何在COMSOL中建立固体力学和达西流的耦合模型,通过引入动态渗透率公式(如指数型变渗透率模型),将煤体变形与瓦斯流动紧密联系在一起。接着讨论了边界条件的设置技巧,强调了钻孔周围网格加密的重要性以及求解器配置的优化方法。此外,文中还分享了一些实用的操作技巧,如使用探针功能实时监测压力变化,确保模拟结果的准确性。最后,作者通过实际案例展示了模型的有效性和应用价值,指出该模型能够更好地预测瓦斯流动路径和抽采效果。 适合人群:从事煤矿开采、瓦斯治理及相关领域的科研人员和技术工程师。 使用场景及目标:适用于需要精确模拟煤矿瓦斯抽采过程的研究项目,旨在提高抽采效率并保障矿井安全。通过该模型,研究人员可以深入理解煤体变形与瓦斯流动之间的复杂关系,从而优化抽采工艺。 其他说明:文章不仅提供了详细的建模步骤和技术细节,还分享了许多实践经验,帮助读者避免常见错误,提升模拟的成功率。同时,作者鼓励进一步探索多物理场耦合的可能性,如加入温度场的影响,以获得更加全面的理解。

    自动控制领域中直流电机模糊PID控制算法的Matlab实现

    内容概要:本文详细介绍了直流电机的传递函数及其在Matlab环境下的模糊PID控制算法实现。首先,阐述了直流电机传递函数的基本概念,描述了输入电枢电压与输出转速之间的动态关系。接着,解释了模糊控制PID算法的工作原理,包括模糊化、模糊规则制定、模糊推理与解模糊等步骤。然后,展示了具体的Matlab代码实现,涵盖了传递函数定义、模糊控制器设计、仿真过程以及绘图展示控制效果。通过对比实验数据,证明了模糊PID控制在应对负载突变时的优势。 适合人群:对自动控制理论有一定了解并希望通过Matlab实现具体控制算法的研究人员和技术人员。 使用场景及目标:适用于需要精确控制直流电机转速的应用场景,如工业自动化生产线、机器人控制系统等。主要目标是提高系统的鲁棒性和适应性,尤其是在面对非线性或不确定性的环境中。 其他说明:文中提供的Matlab代码可以直接运行,便于读者理解和实践。同时,强调了在设计模糊控制器时需要注意的一些关键点,如隶属函数的选择和规则库的设计,确保控制效果最优。

    Matlab. EW-trading-Strategy

    In MATLAB, an EW (Exponentially Weighted) trading strategy involves using moving averages, a common technique for smoothing price data and identifying trends. This strategy can be implemented in MATLAB to generate buy and sell signals based on how the current price relates to the exponentially weighted moving average. Here's a breakdown of how to implement an EW trading strategy in MATLAB: 1. Data Preparation: Load historical price data: Import your financial data into MATLAB. This data should include the closing price of the asset you intend to trade. Calculate the exponentially weighted moving average (EWMA): Use the ewma function in MATLAB to calculate the EWMA. The ewma function takes the price data and a "smoothing factor" as input. The smoothing factor controls the speed at which th

    【嵌入式系统】AUTOSAR操作系统任务管理机制详解:Basic与Extended任务状态及属性配置了AUTOSAR

    内容概要:本文深入探讨了AUTOSAR OS中的任务机制,详细介绍了Basic Task和Extended Task两种任务类型及其状态转换。Basic Task有Suspended、Ready、Running三种状态,Extended Task在此基础上增加了Waiting状态。文章还列举并解释了AUTOSAR OS任务的多个关键属性配置,如任务名称、激活次数限制、内存保护标识、优先级、调度模式、堆栈大小、任务类型、FPU使用、自动启动和时间保护等。这些配置项可通过Vector DaVinci Configurator工具进行设置,以满足不同的应用场景需求。; 适合人群:汽车电子软件工程师,尤其是对AUTOSAR OS有一定了解,希望深入了解任务调度机制的工程师。; 使用场景及目标:①理解Basic Task与Extended Task的区别及其状态转换机制;②掌握AUTOSAR OS任务的关键属性配置,优化任务调度和系统性能; 阅读建议:本文内容较为专业,建议读者结合实际项目经验,特别是AUTOSAR OS的配置和调试经验来阅读,以便更好地理解和应用文中提到的任务机制和配置方法。

    毕业设计基于Python Web的社区爱心养老管理系统(完整前后端+mysql+说明文档+LW+PPT).zip

    前台: 首页、公共书籍、活动信息、网站公告、个人中心 管理员: 首页、用户、身体健康、公共书籍、借阅信息、归还信息、还书入库、图书分类、活动信息、活动报名、活动分类、系统管理等 关键技术:Python、Django、Mysql、B/S 内容包含:源码+数据库+开发文档+LUN文+PPT,快速上手。 标价即实价:一键购买,无需议价。 技术支持:已测试可正常运行,调试问题可联系客服有偿解决。 更多项目:欢迎咨询,我们将快速回复。

    基于MATLAB仿真的逻辑无环流可逆直流调速系统设计与优化

    内容概要:本文详细介绍了如何利用MATLAB/Simulink构建逻辑无环流可逆直流调速系统的仿真模型。首先,通过自定义逻辑切换模块(DLC)来确保正反转切换时不发生环流损耗,采用Stateflow实现状态机控制。接着,分别建立了转速环和电流环的PI控制器,并针对不同应用场景进行了参数整定。特别是在电流环中引入了动态限幅策略,以抑制过冲现象。此外,还探讨了电枢回路的建模方法,将其等效为二阶系统,并强调了平波电抗器电感值对电流脉动的影响。最后,通过对仿真结果进行FFT分析,评估了系统的谐波失真情况,并提出了优化建议。 适合人群:具有一定MATLAB/Simulink基础,从事电力电子、自动控制领域的工程师和技术人员。 使用场景及目标:适用于研究和开发高效可靠的直流调速系统,特别是需要频繁正反转的应用场合。主要目标是掌握逻辑无环流控制的设计原理及其在MATLAB环境下的实现方法。 其他说明:文中提供了详细的代码片段和调试技巧,帮助读者更好地理解和复现实验结果。同时提醒了一些常见的仿真陷阱,如步长选择不当可能导致数值振荡等问题。

Global site tag (gtag.js) - Google Analytics