Gradle之依赖管理

泡在网上的日子 / 文 发表于2015-01-29 16:12 第8824次阅读 Gradle,Android Studio
2

编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!

8.1. What is dependency management?何谓?为何?

依赖管理大致有两块:首先Gradle需要找到你工程需要的东西,这些东西就是所谓的“依赖”。另外Gradle需要构建和上传你工程的产出,这就是所谓的发行。让我们来仔细看看它们:

大 部分工程都不太可能完全自给自足,一把你都会用到其他工程的文件。比如我工程需要Hibernate就得把它的类库加进来,比如测试的时候可能需要某些额 外jar包(jdbc驱动或者Ehcache jar包)。这些文件就是工程的依赖。Gradle需要你告诉它工程的依赖是什么,它们在哪,然后帮你加入构建中。依赖可能需要去远程库下载,比如 Maven 或者 Ivy 库。也可以是本地库,甚至可能是另一个工程。我们称这个过程叫“依赖解决”(dependency resolution).

通常情况下,依赖本身也有依赖。比如Hibernate核心库就依赖一些其他类库。当Gradle测试你工程的时候,它也需要找到这些间接依赖。我们称之为“传递依赖”( transitive dependencies).

大部分工程构建的主要目的是脱离工程使用。比如生成jar包,包括源代码、文档等,然后发布出去。这些个玩意构成了项目的发行内容。Gradle也会替你分忧这个工作。你声明了要发行,Gradle会构建并且发行。你可能会把文件拷贝到本地某处,或者上传到远程 Maven 或 Ivy 库,甚至在其他项目里使用。整个这个都是所谓的发行。

8.2. Declaring your dependencies依赖声明

我们看一下简单的依赖声明脚本:

Example 8.1. Declaring dependencies

build.gradle

  1. apply plugin: 'java'
  2. repositories {
  3. mavenCentral()
  4. }
  5. dependencies {
  6. compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
  7. testCompile group: 'junit', name: 'junit', version: '4.+'
  8. }

这 是在搞毛?这段脚本说的是:1,工程在编译时需要Hibernate core 3.6.7.Final。这样Hibernate核心库和它的依赖库都会引入。2,测试的时候需要4.0以上版本的junit。另外就是这些包都要从 Maven central 库里查找。接下来咱们详细看下。

8.3. Dependency configurations依赖配置

Gradle的依赖会分组为“配置”(configurations) 。一个配置就是一套具名依赖,称为“依赖配置”。你可以声明外部依赖,后面我们会看到。

Java插件定义了一些标准配置,形成了插件本身的类路径库。下面列一下,你可以自己去这看:Table 23.5, “Java plugin - dependency configurations”.

  • compile

  • 该依赖对于编译发行是必须的。

  • runtime

  • 该依赖对于运行时是必须的,默认包含编译时依赖。

  • testCompile

  • 该依赖对于编译测试是必须的,默认包含编译产品依赖和编译时依赖。

  • testRuntime

  • 该依赖对于测试是必须的,默认包含编译、运行时、测试编译依赖。

定制化配置请看: Section 50.3, “Dependency configurations”

8.4. External dependencies外部依赖

依赖类型有多种,现在说一种外部依赖(external dependency)。这种依赖的对象不在工程内,甚至是在远程库里。

定义外部依赖需要如下加入到依赖配置:

Example 8.2. Definition of an external dependency

build.gradle

  1. dependencies {
  2. compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
  3. }

外部依赖使用groupname 和version 属性。根据使用库的不同,group 和version可能是可选的。有一种快捷方式声明依赖:

Example 8.3. Shortcut definition of an external dependency

build.gradle

  1. dependencies {
  2. compile 'org.hibernate:hibernate-core:3.6.7.Final'
  3. }

更多信息请看 Section 50.4, “How to declare your dependencies”.

8.5. Repositories库

Gradle是咋定位外部依赖呢?答案是“库”(repository)。一个库其实就是一大堆文件,不过是用groupname 和version组织好的。Gradle支持很多库,比如 Maven 和Ivy;还只存多种方式连接到库,比如本地系统或者 HTTP.

Gradle默认没定义库。你使用前需要至少定义一个,比如Maven central 库:

Example 8.4. Usage of Maven central repository

build.gradle

  1. repositories {
  2. mavenCentral()
  3. }

或者远程Maven 库:

Example 8.5. Usage of a remote Maven repository

build.gradle

  1. repositories {
  2. maven {
  3. url "http://repo.mycompany.com/maven2"
  4. }
  5. }

或者远程 Ivy 库:

Example 8.6. Usage of a remote Ivy directory

build.gradle

  1. repositories {
  2. ivy {
  3. url "http://repo.mycompany.com/repo"
  4. }
  5. }

你可以自己建个库然后指定:

Example 8.7. Usage of a local Ivy directory

build.gradle

  1. repositories {
  2. ivy {
  3. // URL can refer to a local directory
  4. url "../local-repo"
  5. }
  6. }

工程里可以制定多个库,Gradle会依序查找,一旦找到就停止。更多信息请看 Section 50.6, “Repositories”.

8.6. Publishing artifacts发布文件

依赖配置也用来发布文件,这些文件称为“发布文件”(publication artifacts),或干脆就叫“发件”(artifacts)(不会翻译,谁来纠正一下。。)

一般的,插件会做很多发件定义工作,所以我们不用干什么。不过需要告诉Gradle发件要发布到哪里。方法是把库附在 uploadArchives 任务里。比如我们要发布到远程Ivy库:

Example 8.8. Publishing to an Ivy repository

build.gradle

  1. uploadArchives {
  2. repositories {
  3. ivy {
  4. credentials {
  5. username "username"
  6. password "pw"
  7. }
  8. url "http://repo.mycompany.com"
  9. }
  10. }
  11. }

现在你执行 gradle uploadArchives, Gradle就会构建并上次你的Jar包,同时生成并上传一个ivy.xml 文件.

可以发布到Maven 库,语法有一点点不同。记住要使用Maven插件不然发布不过去。这样Gradle会生成并上传pom.xml文件。

Example 8.9. Publishing to a Maven repository

build.gradle

  1. apply plugin: 'maven'
  2. uploadArchives {
  3. repositories {
  4. mavenDeployer {
  5. repository(url: "file://localhost/tmp/myRepo/")
  6. }
  7. }
  8. }

更多关于发布的信息请看 Chapter 51, Publishing artifacts.

原文地址 http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html

转载网址 http://somefuture.iteye.com/blog/2003535

转载于:https://www.cnblogs.com/yaowen/p/7278151.html

Gradle之依赖管理相关推荐

  1. gradle 的 依赖管理(八)

    目录 1. 概念 2. repositories 3. dependencies 4. 单项目中的依赖管理 1. 概念 gradle的依赖管理就是,在项目需要引入类库时,只需要在gradle中声明,g ...

  2. Gradle项目依赖管理

    作者:黄少存,叩丁狼高级讲师.本文为原创文章,转载请注明出处.  上一篇咱们讲解了 Gradle 构建项目的生命周期,这一篇咱们来看下 Gradle 的另一个重要的知识点,就是依赖管理,那为什么需要依 ...

  3. AndroidStudio使用进阶二:搭建自己的maven私服,并使用Gradle统一依赖管理

    前言: 最近我们老大组织了我们软件团队开了一个小会,说了一些存在的问题,平时在技术上的交流还是比较少的,尤其是在不同的项目之间的开发人员,然而经过这次会议我突然发现,我的缺陷不仅是在基础的能力上,还有 ...

  4. Gradle系列教程之依赖管理

    这一章我将介绍Gradle对依赖管理的强大支持,学习依赖分组和定位不同类型仓库.依赖管理看起来很容易,但是当出现依赖解析冲突时就会很棘手,复杂的依赖关系可能导致构建中依赖一个库的多个版本.Gradle ...

  5. Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)

    Java Gradle入门指南之依赖管理(添加依赖.仓库.版本冲突) 作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/52 ...

  6. Gradle 2.0 用户指南翻译——第五十章. 依赖管理

    本文禁止w3cschool转载! 翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc . 本文翻译所在分支:https://github.com/m ...

  7. Gradle 1.12用户指南翻译——第五十章. 依赖管理

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  8. Gradle for Android 第三篇( 依赖管理 )

    Gradle for Android 第三篇( 依赖管理 ) 依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的j ...

  9. 【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )

    文章目录 一.Gradle 自动下载并配置构建环境 二.Gradle 提供 API 扩展与开发工具集成 三.Gradle 内置 Maven 和 Ivy 依赖管理 四.Gradle 使用 Groovy ...

最新文章

  1. 微信小程序组件 日历
  2. c#_textbox显示刷新规定行数的数据
  3. GitHub开源新命令行工具:在终端里创建、管理PR成现实
  4. 经典论文复现 | PyraNet:基于特征金字塔网络的人体姿态估计
  5. 微软Power BI技术文章与资源目录
  6. Foxmail怎么诊断邮件的状态
  7. 一种情感判别分析体系在汽车品牌舆情管理中的应用
  8. JDK源码系列(2)-Object类
  9. Java小白进阶笔记(5)-进阶面向对象
  10. Python学习——collections系列
  11. vue中动画效果的实现
  12. 12月1日高级软件测试例会记录
  13. 高层建筑电气设计说明书
  14. heidi修改mysql的账号密码_HeidiSQL使用教程
  15. vscode 离线安装.vsix(window 全教程)
  16. pwntcha库的安装依赖
  17. 工欲善其事,必先利其器——学会不将就,让自己事半功倍!
  18. axios在ie浏览器下提示promise未定义
  19. 为何公众号推送会延迟发送_【微课堂】小程序引流神器—微信公众号营销
  20. 共创软硬件协同生态:Graphcore IPU与百度飞桨的“联合提交”亮相MLPerf

热门文章

  1. html流程图可新增删除,CSS / HTML流程图
  2. java account函数的_用Java进行同时函数调用 - java
  3. 未定义与 double 类型的输入参数相对应的函数 eval_点评一下鸿蒙os的时钟计算函数...
  4. php在用js_encode()转换时,实现斜杠不转义
  5. 不止面试题,笔记源码统统都有
  6. 贪心入门——出租车费
  7. php 打开报错,php模式下 运行start.php 报错
  8. xbox无线适配器驱动_手柄杂谈,PS4手柄,Xbox手柄使用感受
  9. dataframe 提取月数据_pandas dataframe数据提取的方法
  10. html canvas抽奖,HTML5 Canvas圆盘抽奖应用(适用于Vue项目)