Maven vs Ant用于Android应用程序中的自动构建

时间:2011-06-05 15:06:24

标签: android ant maven build-automation

我正在评估是否使用Ant或Maven来自动化我的Android开发构建过程。我一直在尝试在线阅读以做出明智的决定,但没有发现许多与Android开发相关的细节。根据您的经验:

  • 主要区别是什么?
  • 我读过一些人说他们有不同的目的?会是什么?
  • 什么会让你选择一个?
  • 每个人的优点和缺点是什么?
  • 哪种设置和维护更容易?
  • 社区中是否有提供/最常用的内容?

我发现了一个类似的问题What benefits does Maven give (over ant) for building android projects?,但他问的是 Maven对Ant的好处,首先,我甚至不知道Ant的好处,其次,他只得到了一个对我来说不清楚的答案。

我使用Intellij,以防它有任何不同,但我希望它没有。

4 个答案:

答案 0 :(得分:13)

如果您可以使用Maven,请使用Maven。并且,你不敢尝试改变标准目录!哎呀,即使我们使用Ant,我也坚持要设置像Maven这样的目录。这样,新开发人员就知道事情的位置,或者必须追踪build.xml以找到事物的位置。另外一点是,如果你使用Ant,你也应该使用Ivy。这样,您就可以在Ant中获得Maven依赖项处理。

具有讽刺意味的是,一旦我们使用Ant和Ivy,并坚持使用标准的Maven目录结构,从Ant迁移到Maven就很容易了。但是,需要移动到Maven也减少了。我们的build.xml简洁易懂。所有文件都在正确的位置。构建快速,简单且易于维护。谁需要Maven?

问题是,一旦我们达到这种状态,就是让项目不再回到新泽西州。开发人员开始在build.xml中列出异常。不要编译此*.java文件。将此*.xml移到我们的java目录中,将测试代码放在main目录下,但我们会将名称test放在文件中,因此我们知道它是测试代码......新的和复杂的事情已经完成。而且,不知何故,我们回到了锡考克斯。

所以,一旦我的Ant项目干净整洁,足以移动到Maven,我就实现了飞跃。

还有一件事:Maven使项目从一台计算机复制到另一台计算机非常非常简单。 Maven处理所有依赖项 - 甚至是构建内容。不再需要您需要 AntContrib ,或者您需要下载 hibernate Ant任务。如果你需要什么,它会自行下载。这是Maven在很多开源网站上如此受欢迎的重要原因之一。

我对Maven的大抱怨是它记录得很糟糕。有一个Wiki,但几乎没有内容,也很少有手册。

答案 1 :(得分:4)

我最近没有将Java或Maven用于Java,但我可以告诉你它们之间的主要区别 - 它基本上归结为自动约定(Maven)与绝对灵活性(Ant)。

Maven将为您做几乎所有事情,但如果您安排项目以适应它,它会更容易使用。它将处理依赖关系跟踪和解决,构建,打包和存储构建的包,同时还有助于分支维护和发布工程。我发现发布使用Maven构建的(flex)项目非常容易。

Ant更灵活。你可以做任何你想做的事情,以你想要的任何方式建立。如果您有预先存在的项目,则可以自动执行IDE的大部分工作而不更改其他任何内容。它不像Maven那样可以手持,它也可以让你在出现问题时更容易诊断......但是你可以自己研究依赖,分支和发布。在我们使用ant的地方,我们使用它,因为我们有一个项目设置,我们想要自动化,Maven不会适应它。如果你需要做一些不受Maven支持的事情,Ant可能是你唯一的希望。

就个人而言,如果可能的话,我会使用Maven而不是Ant,但我承认这并不总是可行。

答案 2 :(得分:4)

考虑使用Gradle!

它结合了Maven(约定优于配置)和Ant中最好的(灵活性和庞大的预制任务库)。

Gradle构建是用Groovy编写的,因此您可以轻松获得脚本语言的全部功能!

Gradle有一个Android插件。我没有使用它,所以我不知道它是否好。

请参阅http://www.gradle.org

答案 3 :(得分:3)

我同意Andrew的答案。但是,我会注意到android SDK团队不提供maven支持。它由third party提供。现在,他们是积极的参与者,但它仍然意味着可能会延迟获得对最新功能的支持。

那就是说,我并不特别喜欢android SDK团队提供的ant支持。如果您运行android create project,最终会得到一个build.xml,建议您复制粘贴的XML块以进行自定义。这使得转移到新版Android SDK变得非常麻烦。

总的来说,我怀疑从长远来看,转向maven会更容易维持。