首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么是maven?有什么福利待遇?

为什么是maven?有什么福利待遇?
EN

Stack Overflow用户
提问于 2010-08-28 05:12:10
回答 9查看 172.8K关注 0票数 135

与蚂蚁相比,使用maven的主要好处是什么?与其说它是一种有用的工具,不如说它是一种烦恼。我使用maven 2和普通Eclipse (没有m2eclipse)和tomcat。

maven的支持者认为

  1. Maven使您可以轻松获得包依赖项。
  2. Maven强制您有一个标准的目录结构。

以我的经验

  1. 找出包的依赖关系其实并不难。反正你也很少这么做。可能是在项目设置期间一次,而在升级期间则很少。使用maven,您将最终修复不匹配的依赖项、编写不好的poms,以及无论如何执行包排除。
  2. 缓慢的修复-编译-部署-调试周期,这会降低生产率。这是我的主要抱怨。如果进行更改,则必须等待maven构建启动并等待其部署。没有任何热部署。

还是我做错了?请给我指出正确的方向,我全神贯注。

EN

回答 9

Stack Overflow用户

发布于 2010-08-28 08:01:14

找出包的依赖关系其实并不难。反正你也很少这么做。可能是在项目设置期间一次,而在升级期间则很少。使用maven,您将最终修复不匹配的依赖项、编写不好的poms,以及无论如何执行包排除。

没那么难..。玩具项目。但是我从事的项目有很多,非常多,而且我很高兴能让他们过渡,为他们制定一个标准化的命名方案。手工管理这一切将是一场噩梦。

是的,有时您必须处理依赖关系的收敛问题。但是仔细考虑一下,这不是Maven固有的,这是任何使用依赖关系的系统所固有的(我在这里讨论的是Java依赖关系)。

因此,使用Ant,您必须执行相同的工作,但您必须手动完成所有操作:获取项目A及其依赖项的某些版本,获取项目B及其依赖项的某些版本,确定它们使用的确切版本,检查它们是否重叠,检查它们是否不兼容等等。欢迎来到地狱。

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

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

缓慢的修复-编译-部署-调试周期,这会降低生产率。这是我的主要抱怨。如果进行更改,则必须等待maven构建启动并等待其部署。没有任何热部署。

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

其次,我不确定使用Ant是否会使事情变得更好。根据我的经验,使用二进制依赖项构建模块化Maven比典型的单块Ant构建要快得多。无论如何,查看一下Maven壳牌,以便(重新)使用Maven环境(顺便说一句,这太棒了)。

最后,我很遗憾地说,这并不是真的是Maven扼杀了你的生产力,而是你滥用了你的工具。如果你对此不满意,那我该怎么说,别用了。就我个人而言,我从2003年起就开始使用Maven了,我从未回头看过。

票数 110
EN

Stack Overflow用户

发布于 2010-08-28 07:49:25

Maven可以被看作是完整的项目开发工具,而不仅仅是像Ant这样的构建工具。您应该使用带maven插件的Eclipse来解决所有问题。

下面是Maven的几个优点,引用自使用Maven的好处页面:

亨宁

  • 快速项目设置,没有复杂的build.xml文件,只有一个POM和go
  • 由于集中式POM,项目中的所有开发人员都使用相同的jar依赖关系。
  • 为项目“免费”获取多个报告和指标
  • 减少源分布的大小,因为可以从中心位置提取jars。

伊曼纽尔·韦尼斯

  • 很多目标都是可用的,因此没有必要开发一些与ANT相反的特定构建过程部分,我们可以使用antrun插件在构建过程中重用现有的ANT任务。

杰西·麦康奈尔

  • 促进代码的模块化设计。通过简单地管理多个项目,它允许将设计布局成多个逻辑部件,通过在pom文件中使用依赖项跟踪将这些部分编织在一起。
  • 强制代码的模块化设计。向模块化代码支付口头服务很容易,但是当代码处于单独编译项目时,不可能交叉传递代码模块之间的引用,除非您在依赖关系管理中特别考虑到这一点……没有‘我现在就这么做,以后再修复’的实现。
  • 依赖性管理是明确声明的。使用依赖关系管理机制,您必须尝试搞糟jar,versioning...there不是‘这个供应商jar的哪个版本?’的经典问题。在现有项目上设置它,如果在存储库中被迫创建“未知”版本以获取running...that或欺骗自己知道ABC.jar的实际版本时,就会从现有的混乱中剥离出来。
  • 强类型生命周期有一个很强的定义的生命周期,软件系统从构建开始一直到最后.允许用户将自己的系统与生命周期相匹配,而不是拼凑自己的生命周期。这有一个额外的好处,允许人们从一个项目转移到另一个项目,并在软件构建方面使用相同的词汇表。

文森特·马索尔

  • 更大的动力:蚂蚁现在是遗产,不能快速前进。Maven正在快速前进,有可能在Maven周围拥有许多高价值的工具(CI、仪表板项目、IDE集成等等)。
票数 20
EN

Stack Overflow用户

发布于 2010-08-28 05:26:12

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

另一点是,如果使用带有增量编译和Maven支持的IDE (如Eclipse+ m2eclipse),那么您应该能够设置编辑/编译/热部署和测试。

我个人不会这么做,因为我开始不相信这种开发模式,因为过去的经验很糟糕(pre )。也许有人可以评论一下这是否真的适用于Eclipse+ m2eclipse。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3589562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档