问题

互联网上有很多关于Maven如何糟糕的话题。我已经使用Maven的一些功能已经有几年了,我认为最重要的好处是依赖管理。

Maven文档不够充分,但通常当我需要完成某些事情时我会弄清楚它然后它会起作用(例如当我实现对jar的签名时)。我不认为Maven是伟大的,但它确实解决了一些问题,没有它将是一个真正的痛苦。

那么,为什么Maven有这么糟糕的代表,以及Maven在未来会遇到什么问题呢?也许还有更多我不了解的替代方案? (例如,我从未详细看过常春藤。)

注意:这不是导致争论的尝试。这是尝试清除FUD。


#1 热门回答(140 赞)

大约六个月前我调查了maven。我们正在开始一个新项目,并没有任何遗产支持。那说:

  • Maven是全有或全无。或者至少从文档中我可以看出来。你不能轻易使用maven作为ant的替代品,并逐渐采用更高级的功能。
  • 根据文件记载,Maven是超凡的幸福,让你所有最疯狂的梦想成真。在你开悟之前,你只需要在手册上冥想10年。
  • Maven使你的构建过程依赖于你的网络连接。
  • Maven有无用的错误消息。将ant的"项目y中不存在目标x"与mvn的"无效任务'运行'进行比较:你必须指定一个有效的生命周期阶段,或格式插件中的目标:goal或pluginGroupId:pluginArtifactId:pluginVersion:goal"有帮助,它建议我用-e运行mvn以获取更多信息,这意味着它将打印相同的消息,然后是BuildFailureException的堆栈跟踪。

我不喜欢maven的很大一部分可以用以下来自Better Builds with Maven的摘录来解释:

当有人想知道Maven是什么时,他们通常会问"Maven究竟是什么?",他们希望得到一个简短的,合理的回答。 "好吧,它是一个构建工具或脚本框架"Maven是三个以上无聊,没有吸引力的单词。它是思想,标准和软件的结合,不可能将Maven的定义提炼为简单的消化声音。革命性的想法通常难以用语言传达。

我的建议是:如果你不能用文字传达这些想法,你就不应该试着写一本关于这个主题的书,因为我不会心灵感应地吸收这些想法。


#2 热门回答(109 赞)

  • 它从一开始就强加给你。
  • 它是基于XML的,所以它和ANT一样难以阅读。
  • 它的错误报告很模糊,当出现问题时会让你陷入困境。
  • 文档很差。
  • 它让事情变得简单,简单易事。
  • 维护Maven构建环境需要花费太多时间,这使得拥有一个全能的构建系统失败了。
  • 需要很长时间才能发现你在maven中发现了一个错误并且没有配置错误。这些错误确实存在,并且在令人惊讶的地方。
  • 它承诺了许多,但却背叛了你一个美丽而诱人但情绪冷漠和操纵的情人。

#3 热门回答(96 赞)

过去我肯定是bitched & moaned about maven。但现在,我不会没有它。我觉得这些好处远远超过任何问题。主要:

  • 标准化的项目结构。给一个新的开发人员加入一个项目:当你说它是一个Maven项目时,开发人员知道项目布局以及如何构建和打包项目当你说它是一个Ant项目时,开发人员将不得不等你解释更多或者将不得不通过build.xml来解决问题。当然,总是可以用Ant来强加公司范围的标准,但我想往往会重新发明众所周知的轮子。
  • 依赖管理。不仅有外部库,还有内部库/模块。请务必使用Maven存储库代理服务器,例如Nexus或Artifactory。可以用Ivy做一些这样的事情。事实上,如果你需要的只是一个依赖管理,你可能最好使用常春藤。
  • 特别是在项目中。我发现打破小子项目非常有用,maven处理得很好。蚂蚁要困难得多。
  • 标准化的工件管理(特别是与nexus或ar​​tifactory一起使用)
  • 发布插件非常棒。
  • Eclipse和NetBeans集成非常好。
  • 与哈德森的融合是一流的。特别是像findbugs这样的趋势图。
  • 这是一个小问题,但是默认情况下,maven嵌入jar或war(不仅仅是文件名)中的版本号等细节非常有帮助。

我的缺点主要是:

  • 命令行非常无益。这让我开始了很多。
  • XML格式非常详细。我可以看出为什么这样做,但阅读仍然是一种痛苦。也就是说,它有一个XSD,可以在IDE中轻松编辑。
  • 一开始很难理解它。例如生命周期之类的东西。然而,关于maven的权威指南是一个很好的介绍。

我真的相信花一点时间去了解maven是值得的。


原文链接