弄清软件包的依赖关系并不难。无论如何,您很少这样做。在项目设置过程中大概一次,在升级过程中可能再一次。使用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,而且我从没有回过头。