maven:Maven是正确的构建工具吗?

  近来有很多有关Maven有用性辩论Maven是个基于Java构建和依赖管理工具应用在很多项目中InfoQ深入调查了这个辩论以理解当前问题是什么以及辩论得出了什么结果

  Apache Tapestry和Apache HiveMind创建者Howard Lewis Ship最近发表了篇博文 在其中他描述了在他目前正在做个项目使用Maven碰到些问题:

  在Eclipse和IDEA中Maven都是非常缓慢、bug多而且不稳定IDEA 7比Eclipse(带有0.0.12Maven插件)好点点前者同步功能是很直接然而要让Maven工作看起来需要没完没了调整、修补和祈祷

  Maven在核心有个伟大思想(真正很好地解决依赖管理问题)但是采用了个非常糟糕插件系统来执行构建令人痛苦的处是个在星期工作好好构建可能在星期 2失败原因是有新、破损插件被发布到中心Maven仓库

  Ship还介绍说明了缺乏文档是理解和使用Maven个主要障碍他推荐使用Ivy作为候选依赖管理系统Eugene Kuleshov 指出将插件版本号加入Mavenpom.xml文件可以解决破损插件问题而Charles Miller 回应说在Maven用户或者安装指南中都没有这个建议

  Don Brown最近也撰写博文说他创建了个新Maven构建解决了他在Maven 2中发现些问题包括加入HTTP连接池和并行制品下载在Maven这个分支上工作正在进行着这些变化有希望重新整合进入主干版本中

  还有很多人加入了这场辩论中Jonas Fagundes质疑为什么Grails不用Maven并且评论:

  Maven是个奇妙工具我们希望每种语言都有这样工具它是个模块化项目构建工具它能够管理依赖、构建周期、测试、 打包并且在仓库中发布你制品它是个项目构建工具领先于通常构建工具(实际上它个版本是在Ant的上层)它为你项目提供了个缺省 路径布局这些缺省路径真很美妙你开始需要做仅仅是选择个名称来创建你项目和缺省包所有其它事情都已准备停当如果你需要有所区别你 可以提供配置在后者情况下你可以提供个新被maven仓库所管理插件(插件只是另外种依赖在你配置了你pom文件的后插件会被自动下 载)它早在rails社区提出惯例优于配置这个术语的前就采用了该策略

  G2OneCTOGraeme Rocher 回应了Fagundes并且介绍说明了为什么Grails不使用Maven他说Grails主要思想是简化Java EE:

  现在Maven完全是Grails思想反面为什么每当我要创建个项目时候我不得不去读他们用户手册?我意思是我没有办法记住这些垃圾而且他们文档十分恶心难以上手

  我认为只有Java人会乐于接受象Maven这么复杂构建系统其他任何社区都会说“这是什么玩意?”对于我来说Maven就是构建系统EJB2:过于复杂过于工程师化而且需要个智能、有代码生成功能IDE和其起工作

  Rocher还指出Grails有Maven支持但不是缺省而且他怀疑Maven最终会被Gant、Raven 或者Buildr这样构建工具所替代

  Matt Raible 针对Rocher帖子发表了跟帖指出了两个主要问题并且对问题提出了潜在解决方案:

  糟糕中心仓库元数据 —— 如果依赖是基于用户反馈而确定那么仓库元数据会干净很多

  POM.xml是项目元数据来源 —— XML和pom.xml啰嗦语法使得构建难以解析用其他格式(如Groovy)来指定项目元数据这样会简单

  Raible补充道:

  我仍然是个Maven粉丝主要是他极大简化了AppFuse维护和发行工作当我将来做GWT、Seam或者 Grails开发时候我会尝试使用Maven来做开发工作为什么?我已经学会了如何使用Maven而且我没有感到其他人谈到痛苦我认为在真 正大型项目(例如产生超过30个WAR构建)中Maven真很炫在真正大型项目中个基于Ant系统会变得难以承受而且难于维护不仅如 此而且用Ant是非常难以维护个模块化构建系统(你可以构建/测试/部署个单独WAR)根据我经验真正大基于Ant系统总是处理那 些最新东西而基于Maven系统各个部分的间是互相依赖需要你保持它们最新Maven确需要你更聪明些并在你子项目上运行“mvn 但是我宁愿这样也不愿意等5分钟来让Ant仅仅为了运行个测试而处理所有事情

  其他些意见:

  boomtown15 —— 我难以相信人们这么容易放弃Maven如果你遵循惯例它实际上很简单我承认建立第个项目有点困难我也同意学习曲线有点陡峭但是我相信益处超过这些问题

  Xavier Hanin —— 那么我是个Maven拥护者么?是也不是我喜欢Maven思想能够用种标准方式来构建个项目真很棒我不喜欢地方是缺乏文档、灵活性和鲁棒性而且Maven有太多巫术

  Les —— [……]我直惊讶于这些对maven攻击Maven学习曲线开始部分比较高但是当事情变得更复杂时候工作就简单了

  Tech Per —— 我同意maven过于复杂过于工程师化而且缺乏好文档但是我仍然有个感觉maven是最好构建工具我每天用maven我埋怨 maven我也曾尝试回头使用ant(我对ant也非常了解)……使用ant是种痛苦所以我发现了我从maven得到了多少益处

  Ortwin —— 我们现在使用Ant来构建大型项目维护个Maven构建需要太多时间和知识虽然Ant构建不是非常简单但是至少它不总是崩溃次我会使用Bash脚本用XML编程所有这些都不方便

  Steve —— NetbeansMaven支持领先于所有我所见过IDE我在中等大小项目中每天使用Maven它给项目带来了很多好处我无法想象失去它会怎 样学习如何驯服Maven确需要些投资但是旦你掌握了你会发现Maven是最好依赖管理、基于目介绍、理解构建生命周期阶段小心你增加是什么仓库这些都是驯服这头野兽关键

  Kevin Menard —— 依我愚见快照系统不起作用正常使用快照时候项目可以让早期使用者用快照来做测试这是个伟大思路方法但是它经常出问题成为阻碍正式版本障碍

  distiller —— [……]我过去宣传Maven但是现在成为个Ivy倡导者Ivy在你如何建立你仓库方面比Maven灵活构建工作委托给Ant了所以Ivy不象Maven那样试图规定你项目结构

  Jay —— [Howard Lewis Ship]意见是成立我已经象你样被Maven整了很多次 —— 下载破损版本明显文档等等但是有什么选择?请给我个惯例优于配置、依赖管理并且有丰富插件工具我会考虑在目前阶段精力应该被用 于解决你提出问题(文档问题特别糟糕)而不是从头开始

  Jon Scott Stevens —— [……] 下面仅供参考……我们已经面试了许多申请Java开发者职位许多人都说了maven优点

  Peter Backlund —— Maven是个非常有用工具我已经在很多项目中使用了它效果很好你需要适应Maven哲学否则你可能会很惨如果你态度是“这是我组织 个项目方式现在我要让Maven适应我方式!”你会处于悲惨世界中如果你和Maven好好相处你会免费得到很多好处

  Matt Raible —— 我不认为所有人都认为Maven是个坏主义 —— 它是个好主义坏实现

  Rick Hightower ——我每天诅咒Maven我每天赞美Maven我对它是爱恨交加虽然Maven本可以做得更好但是使用Ant简直就是梦魇我旅行了很多地方做 了很多咨询/开发工作……我看到了太多打结Ant构建脚本至少用maven我只需要驯服头野兽和顺从个哲学用Ant那简直就是随时出现有 很多头野兽

  Bryan Taylor —— Maven中确实有些革新思想但是它也有些令我害怕东西早在Ruby on Rails风潮的前Maven依靠就是“惯例优于配置”思想但滑稽是RoR被公认为是这个思想发明者这是有原因

  在国内技术社区JavaEye上也有许多有关maven争论 :

  daquan198163 —— Maven N宗罪:在公司内开发项目时类库定下来后为了稳定基本也不会升级了所以它最大优势体现不出来需要搭建私服简直没事找事儿插件比Ant少学习成本高强制用它目录结构和IDE集成不好配置麻烦

  robbin —— 所以我从不用Maven最多用点ant

  Readonly —— 共享类库可以用IDE reference project解决公司内部项目给常用lib建立个project从CVS上check out其他工程项目都依赖这个project就可以了ant build也直接引用这个项目jar就可以项目体积照样只有几百K

  ray_linn —— Maven非常难搞俺承接了个老外项目后期结果就是它~就是它~MAVEN不断报告某个库找不道(明明在服务器上)最后老外和俺都失去调试 MAVEN兴趣大家和平分手Remote team用Maven 对方是在俄罗斯或者南美洲就死掉了为什么不能是visualstudioproject file?

  alexma —— 我们是 Maven 和 Ant 配合用主要用 Maven 依赖管理其他 build 过程全部用 ant 完成就我个人使用经验Maven依赖管理还是挺好用

  dlee —— 对比下:Maven跟Ant关系SVN跟CVS关系可以下结论说Maven是个失败者Maven确实是让人讨厌个东西笨重、学习成本 高、完全技术化研究方式自称是个优秀项目管理(project management)工具但是除了极度狂热技术Fans估计没有人愿意使用它来做项目管理(project management)AntXML脚本很多 时候做事情都没有bash+sed+find等Unix工具用起来快捷我们以前做自动化安装脚本全部使用bash bash和这些工具在Windows上也可以用M$直到bash诞生将近20年的后(bash祖先Bourne Shell诞生30多年的后)才捣鼓出来了个较为像样PowerShell



  jasongreen —— 多么好依赖管理啊我甚至把javascript也打到jar包里用maven来管理真是太方便了当然maven插件是少了点不过这么好东西插件自然会慢慢多起来

  dengyin2000 —— 好用 用它eclipse wtp插件

  koalant —— mvn idea:idea , mvn eclipse:eclipse 可以生成对应 ide 工程文件, 尤其是在 ellij 中,通过内置 maven 插件,直接 debug Jetty:run , 连 tomcat 都不用了.

  你如何看待Maven?



Tags:  myeclipsemaven eclipsemaven maxmaven maven

延伸阅读

最新评论

发表评论