Gradle的目的是什么?

Dat*_*bin 31 android gradle android-studio android-gradle-plugin

我可以在Android Studio 0.4.0的上下文中使用一些帮助来理解Gradle(插件v 0.7)背后的概念.我之前没有使用过Gradle,它只会让我产生问题.我没有看到它的目的/好处,因为我对此知之甚少.

我有一些具体的问题

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

  2. 什么是Gradle包装?对完成的申请有何变化(如果有的话)?

  3. 为什么Gradle需要不断上线?在我工作时,我的个人笔记本电脑上没有互联网接入.它已经到了我无法运行或测试我的应用程序的程度,因为Gradle无法在没有Internet访问的情况下解析某些资源.

  4. 为什么Gradle使用Groovy很重要?我在互联网上搜索过,这往往是人们喜欢Gradle的东西,但他们通常不会解释为什么Groovy很重要或者它对Android应用程序的作用.

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

谢谢

Ahm*_*mad 23

这些依赖是什么?

您可能决定使用很多很酷的库.现在很多这些库都支持与gradle的集成.所以不再导入项目并自己托管.一切都在mavencentral托管.例如,即使您决定使用API​​ 11+,您仍然需要支持库.

什么是Gradle包装?

如果您在团队中工作,或者特别是在开源项目上工作,那么gradle包装器是一个很棒的工具.您不需要安装gradle.gradle包装器将在第一次运行时下载并缓存其所有依赖项.因此,团队中的所有开发人员都可以非常快速地构建项目.

为什么Gradle需要不断上线?

因为需要同步依赖项.如果您使用的是Android Studio,那么您很幸运.最新版本支持"gradle offline模式".

从发行说明:

Studio现在支持Gradle Offline模式.如果您发现自己没有网络连接,并且您的依赖项使用plus-syntax来获取最新的可用版本,这将非常有用.在这种情况下,Gradle将每天(默认情况下)连接到工件存储库以查看是否存在更新版本.如果该网络连接失败,则构建失败.如果您没有网络连接,则存在问题.您现在可以打开编译器> Gradle选项并启用离线模式,这将告诉Gradle忽略更新至今的检查:

gradle offline模式

为什么Gradle使用Groovy很重要?

你在Groovy中编写gradle插件.还有build.gradle中的所有gradle任务.


警告:我不是gradle的专家.实际上也是一个相对较新的用户.

  • 感谢截图,这是一个很大的帮助 (3认同)

Vid*_*dya 23

您的一些问题是一般性的,因为它们说明为什么构建工具作为一般事项是好事.其他人专门去Gradle.我会尝试尽可能简洁地解决这两个类别,同时试图避免别人的挑剔术语.

Maven,Gradle,SBT,Leiningen等构建工具有助于自动完成我们原本必须手动执行或"手动自动化"的任务.我使用后者来描述我以前用Ant做的事情 - 编写自定义任务来编译,运行,生成Javadoc等等,这样任务就可以在未来实现自动化.通过遵循最初由Maven定义并随后被其他人采用的约定(比如将源代码放在src/main/java中),这成为可能.如果我遵循约定,构建工具可以编译,运行,生成Javadoc,test,以及其他所有工作.

现在问题(按顺序):

  1. 构建工具的另一个关键功能是通过跨构建以一致的方式管理依赖关系来减少"jar地狱".我只是指定哪个版本的Apache Commons或Google Guava或Spring或Jackson我想要(甚至是各种版本),构建工具将下载它们并将它们放在某处,以便它们可以在类路径和构建中(如果适用)(如战争文件).我也可以定义范围 - 比如我希望这个依赖项在编译时可用,但另一个只在运行时使用.我是需要明确提供还是可用?类似的东西.
  2. 这是Gradle特定的.如上所述这里的摇篮包装帮助团队,而不必手动安装摇篮,同时也保持一致性运行摇篮.每个人都使用相同的版本.设置完成后,您永远不必担心它,并且您想要使用的所有Gradle任务都可以通过包装器获得,因此您甚至不必关心它在那里.您可以选择直接安装Gradle并直接运行它,但我很少看到这一点.
  3. 这是一般的.我之前提到过依赖管理.为了获取这些依赖项,构建工具需要在Maven Central或一堆第三方存储库中可用的位置联机.其他人采用的另一种Maven创新是存储库管理,因此编译的工件根据约定发布到存储库,因此其他项目可以使用它们.通常,你不关心这一点.你只需告诉工具你需要一个特定的依赖关系,它知道如何抓住它,因为每个人都遵循惯例.在您无法访问互联网(我非常熟悉)的情况下,您可以选择在线时获取所有依赖项,然后选择设置本地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.但更广泛的一点是依赖代码而不是XML有很多好处.

希望有所帮助.


bol*_*ski 6

我理解每个人所说的为什么Gradle的在线部分是必要的,但是对于我们这些在工作中防火墙后面的人,或者当我们可能在线下工作时,它真的给我们带来了至少一次上网的负担能够在离线模式下编译.

我只是不明白为什么这个要求放在项目上.如果我在Android Studio中开始一个全新的项目,我想测试一个概念怎么办?除非我至少在线一次,否则我不能这样做.如果我当时无法访问互联网并想要这样做怎么办?然后怎样呢?

似乎是一种不必要的要求,它给开发人员带来了可以避免的不必要的问题.再一次,我理解它背后的原因,但仍然,强制要求至少在线编译一次以便使用离线似乎有点荒谬.

我想使用Gradle,但是在这个时候,由于在线要求,我们甚至无法在工作中使用它.我将不得不与我们的安全部门合作,确定在我们的防火墙中打出哪些漏洞,以便通过这个漏洞以及正确设置我们的代理以允许它.

所以,在这个时候,我不能推荐Gradle在我的工作地点使用,这意味着我们也将继续使用Eclipse进行Android开发而不是Android Studio.似乎似乎没有必要的限制要求.

  • 我也有同样的问题.下载并启动Android Studio.只是不能这样做,因为它试图下载一些Gradle依赖项,它只是挂在那里等待.我在代理后面:(.有没有办法禁用Gradle并继续前进.我愿意自己手动找到依赖项,并且编写构建脚本而不是IDE无法启动.:( (2认同)