项目需要,开始学习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使用经验时,再来更新。

为什么要抛弃maven相关推荐

  1. Spring 围炉夜话

    工具 Wireshark的抓包和分析,看这篇就够了! - 知乎 POM pom(Project Object Model),项目对象模型.通过xml可扩展标记语言(EXtensible Markup ...

  2. spring5.3.x源码阅读环境搭建

    spring5.3.x源码阅读环境搭建-gradle构建编译 文章目录 spring5.3.x源码阅读环境搭建-gradle构建编译 一.依赖工具 二.下载源码 三.开始构建 四.编译源码 五.源码测 ...

  3. Maven实践:版本管理 SNAPSHOT

    为什么80%的码农都做不了架构师?>>>    什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本 ...

  4. Maven最佳实践:版本管理

    Maven最佳实践:版本管理 什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了 ...

  5. java web项目目录报错_netdevgirl.通过maven创建javaweb项目

    解决方法:右键工程-->Properties-->Project Facets,最面边的面板,选择Runtimes,选中tomcat服务."Apply"应用配置. 2 ...

  6. maven 不编译jasper文件_第一个SpringBoot项目、核心配置文件properties(yml、yaml)、集成jsp...

    SpringBoot简介及国内关注度 SpringBoot简介: 它用来简化 Spring 应用程序的创建和开发过程,也可以说 Spring Boot 能简化我们之前采用 SpringMVC +Spr ...

  7. Java后端学习路线【哔哩哔哩网站】【Java基础、SSM框架、Maven、Mysql、Idea的使用、Springboot、Sprinfcloud、设计模式】

    333实验室的学长发的. [原版]韩顺平-循序渐进学Java(Java从入门到精通 完整版):https://www.bilibili.com/video/BV157411g78y SSM框架:htt ...

  8. kafka maven没有下载_构建工具的进化:ant, maven, gradle

    在讲解基础知识的过程中,我们也要动手去写.而Java发展到现在,可以帮助我们写程序,构建,发布的工具有一大堆.今天就来讨论一下构建工具.在开始之前,我们先讲点别的. 如何学习琳琅满目的框架和工具 学J ...

  9. 阿里巴巴 连接池 druid 的使用、maven依赖

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1.   Druid是一个JDBC组件,它包括三部分:  DruidDriver 代理Driver, ...

最新文章

  1. VTK修炼之道20:图像基本操作_图像类型转换
  2. POJ--2488 A Knight's Journeyb
  3. 搜索推荐炼丹笔记:酒店搜索位置偏差的边际重要性
  4. OPenGL实例化绘制、普通绘制说明
  5. 朝着理想坚实迈进_坚实原则:开放/封闭原则
  6. 来博客园居然有一年了
  7. VS调试时断点无法进入或命中的原因及解决方法(PDB引发的)
  8. 50秒开门,3分钟开走,特斯拉Model S就这样不翼而飞
  9. Flink+Hudi 构架湖仓一体化解决方案
  10. python异步爬虫下载_Python3 异步代理爬虫池
  11. [1-1] 把时间当做朋友(李笑来)Chapter 1 【心智的力量】 摘录
  12. 支付宝AR抢红包?前端轻松就破解~
  13. pytorch安装 镜像网站
  14. MySQL常见错误码
  15. Tomcat 2022-7-27
  16. daocloud mysql_DaoCloud Services 开放 API
  17. sas统计分析学习笔记(六)
  18. 机器学习 - 模型评估(TPR、FPR、K1、ROC、AUC、KS、GAIN、LIFT、GINI、KSI)
  19. BIM一级建模师考试试题及答案
  20. compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion

热门文章

  1. Java中arraylist和数组的相互转换
  2. Android Studio 电子书阅读器 双端程序
  3. unity_Text文本和图片组合
  4. video-player [ 视频播放插件 ]
  5. L1距离和L2距离图像解释
  6. 沙盒效应(Sandbox Effect)
  7. 渗透测试团队协作平台——Dradis Pro
  8. nginx 入门简介
  9. VUE扫码枪中文输入法兼容自动回车事件(上)
  10. “山寨机、猪流感”的英文说法(及更多热词——每天更新)