maven - 将它仅用于依赖性管理,然后让蚂蚁做其他所有事情是一种好/通常的做法吗?

时间:2009-11-06 17:51:22

标签: maven-2 ant

我是maven的新手。

除了用于管理依赖项之外,我发现它几乎没用。

编写一个pom.xml变得非常困难,我从maven的一个任务中生成了一个ant build.xml(这是一个非常方便的任务......) 我不得不调整maven生成的build.xml。现在我所有的编译,测试等都是用这个build.xml完成​​的。

这种组合是否常见?我想把它永久化在我的项目中。

8 个答案:

答案 0 :(得分:8)

  

除了用于管理依赖项之外,我发现它几乎没用。

那是因为你没有得到它:)依赖管理只是Maven的一小部分,Maven确实有更多。引用Maven: The Definitive Guide

Maven是一个项目管理工具,它包含项目对象模型,一组标准,项目生命周期,依赖关系管理系统以及在生命周期中定义阶段执行插件目标的逻辑。当您使用Maven时,您使用定义良好的项目对象模型描述您的项目,然后Maven可以从一组共享(或自定义)插件中应用横切逻辑。

Maven使用约定优于配置,有许多有用的默认值(目录位置,定义的生命周期,一组知道如何构建和组装软件的常见插件),Maven提供了通用接口来构建项目(与Ant不同,你知道如何使用每个项目运行测试,打包等,不需要打开构建脚本来了解它是如何工作的完成),Maven通过maven插件实现重用(构建逻辑嵌入到插件中用于DRY目的,你不必一遍又一遍地重复,你不必复制/粘贴部分你的构建脚本),Maven有一个项目对象模型,它允许你通过元数据描述你的项目(这使得依赖管理,远程存储库,构建逻辑的重用,工具集成,工件搜索.. )。

所以,因为Maven为项目管理提供了通用语言或共享语言,比较Maven和Ant(如果你想要+ Ivy),Maven vs. Buildr,Maven vs. Gradle就像比较苹果到橘子,比较只是无关紧要。

  

这种组合是否常见?我想把它永久化在我的项目中。

嗯,不,这不是真正的做事方式。这可能看起来很诱人(因为你感觉你重新获得了控制权,因为你了解Ant发生了什么),但你实际上又重复了自己并失去了Maven的所有优点。当然,Maven有一些学习曲线,我不是说你会在一个晚上学会它,但是一旦你得到它,你就会感受到力量。因此,我建议继续尝试,在邮件列表上提问或在SO上提问,阅读Maven书等。但不要放弃。

答案 1 :(得分:3)

所以你通过在pom.xml中编写Ant Tasks来重新完成Maven免费提供给你的东西吗?

除了执行Dep-Mgmt之外,Maven还将编译源代码,运行所有测试用例并将整个事件打包为jar文件,无需额外配置。这是默认值。

使用Ant clutter丰富pom.xml并不常见。但是,某些特殊任务或遗留Ant任务有时会嵌入到pom.xml生命周期中,但这些都是例外情况,而不是常见情况。

撰写pom.xml时究竟有什么困难?

我想知道,因为大多数时候你会为一个项目做一次这样的事情而不是一直都在努力。此外,大多数IDE都支持创建最小的pom.xml,无论如何只需几行。

答案 2 :(得分:2)

我已经尝试过Maven,亲自为我的家庭项目和专业工作,而且......我讨厌它。我必须承认我没有很多经验,但感觉并不好。我认为Maven是一个不太完美的好主意实现。我可能会受到Maven爱好者的抨击,但这是我个人的意见。

我认为Maven在处理相互关联项目网络的组织中自成一体,就像Apache一样;其中依赖关系往往会发生很大变化,需要明确指定以避免“jar版本地狱”。对于依赖于一些很少变化的罐子的孤立项目,我发现它过于干扰。

回答你的问题:我已经阅读了互联网上的论坛和博客文章,其他人正在宣传你的宣传内容。他们使用Maven进行依赖管理,然后使用Ant进行构建。这破坏了Maven应该带来的一些好处,例如在Maven中比“Ant”更容易指定“普通”构建。但是,我认为你可能会因为你不是唯一拥有这个想法的人而受到鼓舞,这确实适合其他人。

我想给你引号的链接,但过去几周我发现了这些内容并没有收集引用。

答案 3 :(得分:2)

我是Maven粉丝,但并非没有问题。我记得的一些问题(并且还在争吵):

  • 就像Ant一样,它有一种难以理解的神奇语法。如果你熟悉Any,你可能会忘记这一点,但很多Ant任务都是非常详细的记录。 Maven也是如此。不过,我最终切换到Maven的原因之一是,对于许多mojos(类似于Ant任务),您不必了解如何配置它们。您只需将各个部分放在正确的位置(这可能与配置任务一样难......)。
  • 自动依赖管理真是太棒了!......当它工作时。当您必须使用非Maven依赖项(如Hadoop)时,它就成了一个问题。您必须将它们作为系统范围依赖项引用,找到打包它们的其他人,或者自己打包它们。而且你最终需要设置自己的Maven代理,比如Nexus。这是一件额外的麻烦。
  • Maven在非网络或隔离的局域网上遇到很多麻烦。只要你联网,自动化就很棒。

答案 4 :(得分:1)

  

编写一个pom.xml变得如此困难,我从maven的一个任务中生成了一个ant build.xml(这是一个非常方便的任务......)我不得不调整build.xml。由maven生成。现在我所有的编译,测试等都是用这个build.xml完成​​的。

好。您可以使用maven archetype plugin生成pom:)

  

这种组合是否常见?我想把它永久化在我的项目中。

JBoss Seam在内部使用Maven来处理依赖关系并在Maven中执行一些目标。这是一个与Ant一起成长的大项目,现在很难单独在Maven中构建整个项目,但这种情况将在不久的将来发生。

答案 5 :(得分:0)

如果您只需要使用Ant进行依赖关系管理,则可以尝试Ivy。 Maven是一个用于管理构建过程的整个生命周期的工具。

就个人而言,一旦你克服了学习曲线,我发现Maven是一个很好的工具,因为你可以标准化很多项目的构建过程,并且有很多很好的附加组件(特别是对于代码分析工具)。但是,你很有可能在你的构建中使用Ivy + Ant组合更有意义。

答案 6 :(得分:0)

老实说,我很想看到一个依赖管理工具,它实现了Maven的这一部分,特别是作为命令行工具。对于一切但依赖管理,我发现Maven绝对可怕,如果你正在做任何事情,但确切的是最常见的情况。每当我尝试做一些不“正常”的事情(系统/验收测试等)时,由于

我遇到了一堵砖墙
  • 要么是可怕的文件,
  • 被告知它“不是maven方式”(当需要发生任务时,“方式”不应该是一个因素),或者
  • 被告知等待maven的下一个版本,因为它可能会得到支持。

我很想拥有一个命令行工具,可以实现Maven的“我需要这个作为依赖项,去获取它”的功能,甚至可能使用各种软件包的pom.xml文件。然后我可以在Makefile中使用它并且开心:)

答案 7 :(得分:0)

对提出的问题的简单回答:YES< - 点击链接了解详情和推理。