Maven 2 针对Maven的案子?

Maven 2 针对Maven的案子?,maven-2,ant,Maven 2,Ant,我一次又一次地读到和听到人们对Maven及其复杂性感到沮丧。而且使用Ant构建代码要容易得多 然而,为了: 编译代码 运行测试 打包一个可展开单元 这就是您对Maven的全部需求: <project> <modelVersion>4.0.0</modelVersion> <groupId>type something here</groupId> <artifactId>type something here&l

我一次又一次地读到和听到人们对Maven及其复杂性感到沮丧。而且使用Ant构建代码要容易得多

然而,为了:

  • 编译代码
  • 运行测试
  • 打包一个可展开单元
  • 这就是您对Maven的全部需求:

    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>type something here</groupId>
      <artifactId>type something here</artifactId>
      <version>type something here</version>
    </project>
    
    
    4.0.0
    在这里输入一些东西
    在这里输入一些东西
    在这里输入一些东西
    

    对应的最小Ant构建文件是什么?

    Maven的问题不在于它何时工作,而在于它何时中断。在ant中,如何解决问题通常是显而易见的

    有了Maven,我需要下载buggy插件的源代码,调试它(这不是小事),修补它,构建插件的新版本,在本地部署它(希望有一个新版本)。这可能会导致必须修补其他插件(更新它们以使用新版本)

    另外,如果Maven缺少一个特性,我需要编写一个完整的插件或使用antrun插件


    因此,人们必须在Maven的工作方式、bug修复的等待时间以及维护复杂的Ant构建脚本的难度之间做出判断。

    没有相应的最小Ant文件。可以说,Maven是一个固执己见的软件。它假设代码在哪里,编译文件在哪里,可分发文件放在哪里,如何触发测试和其他任务的加载。换句话说,maven基本上不需要显式定义就能完成这些任务

    当然,问题是,并不是所有的东西都适合一个预先确定的框架,所以有必要做一些特定的事情,比如ant(无论如何,所有东西都是特定的)工具:没有区别,你只是描述你需要什么。据我所知,这是人们对maven的常见抱怨。另一方面,maven不阻止配置,因此可以对其进行调整,并在必要时使用ant

    对于新项目,我更喜欢maven,因为我可以遵循合理的maven约定,但对于现有项目,我会使用ant构建脚本

    更新

    更正:对于现有的项目,我会花很长的时间仔细考虑迁移到maven,只有到那时,如果我真的遇到困难,才使用ant。我越是使用maven,我就越意识到它是一个多么有价值的工具,证明ant是多么的困难:立即有价值的插件(也就是说,不是像ant那样的构建块)、标准化(年轻人在跳入新项目和构建代码时没有问题)、依赖关系管理,与Hudson/Jenkins的集成…很难再证明ant的合理性,除了极端的项目生命周期结束构建,至少在我所从事的项目类型上是如此。

    ,Maven的问题不在于它如何工作,而在于它如何失败

    在Ant中,依赖关系管理是一个必须手动解决的问题(暂时忽略Ivy,因为它本质上是连接到Ant上的Maven方法)。如果您有很多依赖项,这可能会很耗时,但这是一次性的成本。一旦您组织了依赖项并将其签入版本控制存储库,它就可以正常工作了。至少在您必须更改依赖项之前是这样,希望这种情况很少发生(但有些情况并非如此)

    Maven通过使依赖项动态化来“解决”依赖项问题,从而避免了大量前期成本,并使更改依赖项变得更容易。这种灵活性的代价是复杂性。Maven将您的构建转换为分布式系统,这样做会违反许多规则。其中一些问题更多的是理论问题,而不是实践问题。例如,我不知道有任何Maven存储库被破坏的情况,但这并不意味着您不必了解安全性影响。远程存储库的其他问题(如可靠性、带宽和延迟)是更常见的故障原因

    Maven将在本地缓存依赖项,这样一旦您检索了项目所需的所有内容,它就应该避免重复访问存储库。但是随着时间的推移,随着项目中开发人员数量的增加,您将需要多次重新检索依赖项。使用默认的Maven设置,您可以外包依赖项管理。当您需要依赖项时,它会立即可用,还是服务器会停机?6个月后,远程存储库是否仍然可以使用它?可能吧,但这不在你的控制范围之内

    因此,Maven倡导者将告诉您,您可以而且应该运行自己的Maven存储库,以避免分布式依赖性引起的许多问题。好的,但在这一点上,我们必须停止假装Maven很简单

    过去人们对Maven生气的另一个原因是它的插件系统。Maven能够自我更新,但这通常只会导致破坏。我相信这种行为在最近的版本中已经被驯服了

    Maven可能仍然是某些环境的最佳解决方案,例如,正在并行开发多个项目的团队,这些项目之间存在一些耦合,但它远不是无痛的


    蚂蚁也不是无痛的,但疼痛往往是自己造成的,而不是你无法控制的。您需要引入更高级别的抽象来保持事情的可管理性。是这方面的有用工具。有了它(也许像Maven鼓励的那样?),您可以在大型项目中有效地使用Ant。Ant构建文件与任何其他程序一样(除了详细的XML语法),它需要随着情况的变化进行维护和重构,而不仅仅是黑客攻击,直到它看起来正常工作为止。Ant所青睐的是它的健壮性,它通常会产生可重复的构建,并且有很好的文档记录。

    你已经知道你的问题的答案了:没有Ant等价物t