弄清楚包依赖关系真的不是那么难。反正你很少这样做。可能在项目设置期间一次,在升级期间很少。使用maven,你最终会修复不匹配的依赖项,写得不好的pom,并无论如何执行包排除。
没那么难...用于玩具项目。但是我从事的项目有很多,真的很多,我很高兴能传递它们,为它们提供标准化的命名方案。手动管理所有这些将是一场噩梦。
是的,有时你必须研究依赖关系的收敛。但是三思而后行,这不是Maven固有的,这是任何使用依赖关系的系统所固有的(我在这里谈论的是Java依赖关系)。
因此,使用Ant,您必须执行相同的工作,除了您必须手动执行所有操作之外:获取项目A的某些版本及其依赖项,获取项目B的某些版本及其依赖项,弄清楚它们使用的确切版本,检查它们是否不重叠,检查它们是否不兼容,等等。欢迎来到地狱。
另一方面,Maven 支持依赖关系管理,并将为我以可传递的方式检索它们,并为我提供管理依赖关系管理固有的复杂性所需的工具:我可以分析依赖关系树,控制可传递依赖关系中使用的版本,根据需要排除其中一些版本,控制跨模块的收敛等。没有魔法。但至少你有支持。
不要忘记,依赖管理只是Maven提供的一小部分,还有更多(甚至没有提到与Maven完美集成的其他工具,例如Sonar)。
缓慢的 FIX-COMPILE-DEPLOY-DEBUG 周期,这会扼杀生产力。这是我的主要抱怨。你做了一个改变,你必须等待maven构建启动,等待它部署。没有任何热部署。
首先,你为什么这样使用Maven?我没有。我使用我的IDE来编写测试,编写代码直到它们通过,重构,部署,热部署并在完成后运行本地Maven构建,然后再提交,以确保我不会破坏连续构建。
其次,我不确定使用Ant会让事情变得更好。根据我的经验,使用二进制依赖项的模块化Maven构建使我比典型的整体式Ant构建更快地构建时间。无论如何,看看Maven Shell是否有一个准备(重新)使用的Maven环境(顺便说一句,这真是太棒了)。
所以最后,我很抱歉地说,并不是真正的Maven在扼杀你的生产力,而是你滥用了你的工具。如果你对它不满意,好吧,我能说什么,不要使用它。就个人而言,我从2003年开始使用Maven,我从未回头。