为什么maven?有什么好处? [关闭]

问题

与让我们说蚂蚁相比,使用maven的主要好处是什么?它看起来更像是一种烦恼而不是一种有用的工具。我使用maven 2,使用普通的Eclipse Java EE(没有m2eclipse)和tomcat。

maven的支持者相信这一点

  • Maven让你轻松获得包依赖性
  • Maven强制你拥有标准的目录结构

在我的经验中

  • 弄清楚包依赖性真的不是那么难。无论如何你很少这样做。可能在项目设置期间一次,在升级期间更多。使用maven,你最终会修复不匹配的依赖关系,写得不好的poms,以及无论如何都要进行包排除。
  • 缓慢的FIX-COMPILE-DEPLOY-DEBUG循环,这会导致生产力下降。这是我的主要抱怨。你做了一个改变,你必须等待maven build进入并等待它部署。没有任何热门部署。

或者我只是做错了?请指出正确的方向,我全都耳朵。


#1 热门回答(105 赞)

弄清楚包依赖性并不是那么难。无论如何你很少这样做。可能在项目设置期间一次,在升级期间更多。使用maven,你最终会修复不匹配的依赖关系,写得不好的poms,以及无论如何都要进行包排除。

对于玩具项目来说并不难。但是我工作的项目中有很多很多,我很高兴能够为他们提供标准化的命名方案。手动管理所有这些将是一场噩梦。

是的,有时你必须致力于依赖性的融合。但想想它两次,这不是Maven所固有的,这是任何使用依赖项的系统所固有的(我在这里谈论的是Java依赖项)。

所以使用Ant,你必须做相同的工作,除了你必须手动完成所有事情:抓住项目A及其依赖项的某些版本,抓住项目B及其依赖项的某些版本,弄清楚自己使用的确切版本,检查它们没有重叠,检查它们是否不相容等等。欢迎来到地狱。

另一方面,Maven支持依赖管理,并将为我传递检索它们,并为我提供管理依赖关系管理所固有的复杂性4254040所需的工具**:我可以分析依赖树,控制传递依赖中使用的版本,排除一些如果**需要它们,控制跨模块的收敛等等。没有魔法。但至少你有支持。

并且不要忘记,依赖管理只是Maven提供的一小部分,还有更多(甚至没有提到与Maven很好地集成的其他工具,例如,Sonar)。

慢速FIX-COMPILE-DEPLOY-DEBUG循环,可以降低生产率。这是我的主要抱怨。你做了一个改变,你必须等待maven build进入并等待它部署。没有任何热门部署。

首先,你为什么要像这样使用Maven?我不。我使用我的IDE来编写测试,代码直到它们通过,重构,部署,热部署并在我完成之前运行本地Maven构建,然后提交,以确保我不会破坏连续构建。

其次,我不确定使用Ant会让事情变得更好。根据我的经验,使用二进制依赖项的模块化Maven构建比典型的单片Ant构建提供了更快的构建时间。无论如何,请查看Maven Shell以准备(重新)使用Maven环境(顺便说一句,它很棒)。

所以最后,我很遗憾地说,这并不是真正的Maven,这会影响你的工作效率,而是你误用了你的工具。如果你对它不满意,那么,我能说什么,不要使用它。就我个人而言,我从2003年开始使用Maven而且我从未回头。


#2 热门回答(20 赞)

Maven可以被视为完整的项目开发工具,而不仅仅是像Ant这样的构建工具。你应该使用Eclipse IDE with maven plugin解决所有问题。

以下是Maven的一些优点,引自Benefits of using Maven页面:

Henning快速项目设置,没有复杂的build.xml文件,只是一个POM,并且由于集中式POM,项目中的所有开发人员都使用相同的jar依赖项。为"免费"项目获取大量报告和指标可以减少源分发的大小,因为可以从中心位置抽取罐子Emmanuel Venisse有很多目标可用,所以没有必要开发一些特定的构建过程与ANT相反,我们可以在构建过程中使用antrun插件重用现有的ANT任务Jesse Mcconnell促进代码的模块化设计。通过简化管理多个项目,它允许将设计布局成多个逻辑部分,通过在pom文件中使用依赖性跟踪将这些部分编织在一起。强制执行代码的模块化设计。很容易为模块化代码支付口碑服务,但是当代码在单独的编译项目中时,除非你在依赖管理中特别允许它,否则不可能在代码模块之间交叉授粉...没有'我会'现在就这样做,并在以后的实施中修复它。明确宣布依赖管理。使用依赖关系管理机制你必须尝试搞砸你的jar版本......没有任何经典问题'这个供应商jar的哪个版本是这个?'如果它存在,当你被迫在你的存储库中制作"未知"版本来启动并运行时,在现有项目上进行设置就会破坏现有混乱的顶部......或者说你知道ABC.jar的实际版本。强类型生命周期有一个强大的生命周期,软件系统从构建的开始到结束......并允许用户将他们的系统混合和匹配到生命周期,而不是拼凑他们自己的生命周期。这有一个额外的好处,就是允许人们从一个项目转移到另一个项目,并在软件构建方面使用相同的词汇表Vincent Massol更大的动力:Ant现在已经成为传统,并没有快速前进。 Maven正在快速发展,并且有可能围绕Maven(CI,Dashboard项目,IDE集成等)拥有大量高价值工具。


#3 热门回答(10 赞)

找出小项目的依赖关系并不难。但是一旦你开始处理具有数百个依赖项的依赖树,事情很容易就会失控。 (我是根据这里的经验说的......)

另一点是,如果你使用具有渐进式编译和Maven支持的IDE(如Eclipse m2eclipse),那么你应该能够设置编辑/编译/热部署和测试。

我个人不这样做是因为我过去因为糟糕的经历(Maven之前)而不信任这种发展模式。也许有人可以评论这是否真的适用于Eclipse m2eclipse。