Gradle的目的是什么?

数据猫罗宾

在Android Studio 0.4.0的上下文中,我可能需要一些帮助来了解Gradle(plugin v 0.7)的概念。我以前没有使用过Gradle,但除了问题之外,没有其他原因。我没有看到它的目的/优点,因为我对此不够了解。

我有一些具体问题

  1. 这些依赖性是什么?我正在制作一个带有导航抽屉的简单应用程序,该应用程序应本地支持API 11+。我可以使用哪些依赖项?

  2. 什么是Gradle包装器?它会对完成的申请产生什么变化(如果有)?

  3. 为什么Gradle需要持续在线?我上班时无法在个人笔记本电脑上访问互联网。到了我无法运行或测试我的应用程序的地步,因为Gradle在没有互联网访问的情况下无法解析某些资源。

  4. 为什么Gradle使用Groovy如此重要?我已经在互联网上进行搜索,而这往往是人们喜欢Gradle的地方,但他们通常不会解释Groovy为什么如此重要或对Android应用程序有何作用。

有时作为中级程序员很难,因为信​​息往往过于简单或过于复杂。除了我的特定问题,您可以提供的任何其他信息都将是有用的。我不想讨论Gradle与可能做同样事情的其他工具的优缺点,我只是想了解有关Gradle及其使用的更多信息,以便我可以做出明智的决定。

谢谢

维迪亚

您的某些问题很笼统,因为它们可以解释为什么构建工具通常是一件好事。其他人则特别喜欢Gradle。在尽量避免别人挑剔的术语时,我将尽量简洁地解决这两个类别。

诸如Maven,Gradle,SBT,Leiningen等构建工具可帮助自动化任务,否则我们将不得不手动执行或“手动自动化”。我用后者来描述我过去使用Ant所做的工作-编写自定义任务来编译,运行,生成Javadoc等,以便将来可以自动执行这些任务。通过遵循最初由Maven定义并随后被其他人采用的约定(例如将源放在src / main / java中),这成为可能。如果遵循这些约定,则构建工具可以以最少的额外工作来编译,运行,生成Javadoc,测试以及所有其他内容。

现在对您的问题(按顺序):

  1. 构建工具的另一个关键功能是通过在整个构建过程中以一致的方式管理依赖项来减少“麻烦”。我只是指定我想要的Apache Commons或Google Guava或Spring或Jackson的版本(甚至版本范围),并且构建工具会下载它们并将它们放置在某个位置,以便它们可以在类路径和构建中(如果适用)(例如战争文件)。我还可以定义范围-就像我希望这种依赖关系在编译时可用,而另一个依赖关系仅在运行时可用。我需要明确提供它,还是可以使用它?类似的东西。
  2. 这是特定于Gradle的。如上所述这里的摇篮包装帮助团队,而不必手动安装摇篮,同时也保持一致性运行摇篮。每个人都使用相同的版本。设置好之后,您就不必担心它了,您想要使用的所有Gradle任务都可以通过包装器获得,因此您甚至不必担心它在那里。您可以选择直接安装Gradle并直接运行它,但是我很少明白这一点。
  3. 这很一般。我之前提到过依赖管理。为了获取这些依赖关系,构建工具需要在线获得Maven Central或大量第三方存储库中的可用资源。其他人采用的另一个Maven创新是存储库管理,因此已编译的工件会根据约定发布到存储库,以便其他项目可以使用它们。通常,您并不在乎。您只需要告诉工具您需要某种依赖,它就知道如何获取它,因为每个人都遵循约定。在您无法访问Internet的情况下(我很熟悉),您的选择是仅在线上获取所有依赖关系,然后选择设置本地Maven存储库(例如Nexus或Artifactory)以将这些工件发布到。然后,您告诉构建工具以及Maven Central等等。
  4. Maven配置了XML,在当时看来确实很酷。但是有两个后果。一是配置变得非常冗长。另一个是很难做定制的事情。您必须用XML声明式地执行所有操作,许多人发现这很痛苦。您可以使用XML配置插件,也可以编写自己的插件并将其包装为Maven可以理解并可以使用XML配置的方式。在代码中进行自定义构建的东西要容易得多,功能也更强大。Gradle之所以选择Groovy,是因为Groovy可以提供出色的DSL,并且对于来自Maven的Java开发人员来说非常容易学习。SBT选择了Scala,Leiningen选择了Clojure,因为那些构建工具针对的是那些语言/平台,因此,例如,Scala开发人员除了学习DSL之外,无需学习任何其他新知识即可使用SBT。

希望能有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章