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

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

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

我发现了一个类似的问题Maven为构建android项目提供了什么好处(超过ant)? ,但他问的是Maven对Ant的好处,首先,我甚至不知道Ant的好处,其次,他只得到了一个对我来说不清楚的答案。

我使用Intellij,以防它有任何区别但我希望它不会。

如果您可以使用Maven,请使用Maven。 并且,你不敢尝试改变标准目录! 哎呀,即使我们使用Ant,我也坚持要设置像Maven这样的目录。 这样,新开发人员就知道事情的位置,或者必须通过build.xml进行跟踪以find事物的位置。 其他的是,如果你使用Ant,你也应该使用常春藤 。 这样,您就可以在Ant中获得Maven依赖项处理。

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

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

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

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

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

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

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

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

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

考虑使用Gradle!

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

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

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

见http://www.gradle.org

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

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

总的来说,我怀疑从长远来看,迁移到maven将更容易维护。