1. 什么是依赖管理

依赖管理可以分为两部分:一是依赖,即项目构建或运行时所需要的一些文件;二是发布,即构建完成后上传到某个地方。

1.1 依赖

大部分的项目都需要第三方库类或项目文件,这些文件就是项目的依赖了。比如JDBC的jar包,junit的jar包等等。Gradle需要你告诉它工程的依赖是什么,在哪里可以找到,然后它帮你加入构建。在依赖中,可能需要去远程仓库下载文件,如maven或Ivy,本地仓库,甚至是另一个项目,这个过程我们称之为依赖解决。
另外,我们所依赖的文件自身可能也有依赖,当Gradle进行构建的时候,它也会去找这些依赖,这个过程我们称之为依赖传递。

1.2 发布

大部分的项目构建的主要目的是生成一些项目之外使用的文件。比如生成jar包,包括文档、源码,然后打包发布出去。这些文件构成了项目的输出内容,并由你决定要对它自己做。比如复制到某个目录,上传到maven或Ivy仓库,在其他项目中使用。这些都可以称之为发布。

2. 依赖声明

以下是一个依赖声明的例子:
apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

这里repositories里的内容声明了maven中央仓库,这是Gradle去找依赖的地方。接着是定义了两个依赖。一个是地需要的hibernate-core.3.6.7Final.jar。另一个是测试时需要的junit,版本是4.0以上。

这里先简单解释,后面的笔记会有更详细的描述。

3. 依赖配置

Gradle 中以组织的形式来划分配置。每一个配置都只是指定的一组依赖,我们称之为依赖配置。我们可以用它们的声明外部依赖和项目的发布。
Java插件定义了许多标准的配置,这些配置也表示了java插件所使用的类路径(classpath)。如以下:
  • compile:编译项目代码所需要的依赖。
  • runtime:运行时所需要的依赖。默认情况下,包含了编译时期的依赖。
  • testCompile:编译测试代码时所需要的依赖。默认情况下,包含了编译时产生的类文件,以及编译时期所需要的依赖。
  • testRuntime:测试运行时期的依赖。默认情况下,包含了上面三个时期的依赖。
不同插件提供的标准配置不同,我们也可以自己定义。这点可以看文档的第50章《依赖管理》。

4. 外部依赖

依赖的类型有很多种,其中一种叫外部依赖。它指的是依赖于一些如在外部构建,存放于类似maven的仓库,或保存在本地文件系统的某个目录中的文件。
定义外部依赖包含group, name和version这三个属性。根据选取的仓库不同,group和version可能不需要。
dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
}

除了这种写法之外,还有一种更简洁的写法,就是把这三个属性的值拼接起来,写成这样:"group:name:version"。如下所示:

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

5. 仓库

Gradle 是在一个仓库里查找外部依赖的。仓库会按照group,name和version的规则来存放文件。Gradle支持不同的仓库格式,如maven,Ivy等。并且提供了多种访问仓库的方式,比如使用本地文件系统或HTTP。

下面是使用maven中央仓库的例子:
repositories {
    mavenCentral()
}

还有使用maven远程仓库的例子:

repositories {
    maven {
        url "http://repo.mycompany.com/maven2"
    }
}

使用远程Ivy仓库:

repositories {
    ivy {
        url "http://repo.mycompany.com/repo"
    }
}

使用本地Ivy仓库:

repositories {
    ivy {
        // URL can refer to a local directory
        url "../local-repo"
    }
}

一个项目中可以使用多个仓库,Gradle会按顺序依次寻找,找到后会停止寻找。


6. 打包发布

依赖配置也用于发布文件,我们称之为打包发布或发布。
插件对打包提供了完美的支持,所以我们只需要告诉Gradle要发布到哪里。这就需要在uploadArchives任务中添加一个仓库。
下面是发布到Ivy仓库的例子:
uploadArchives {
    repositories {
        ivy {
            credentials {
                username "username"
                password "pw"
            }
            url "http://repo.mycompany.com"
        }
    }
}

执行 gradle uploadArchives,Gradle会构建并上传你的jar包,同时也会生成一个ivy.xml文件且一并上传。


发布到maven仓库需要maven插件,Gradle也会生成pom.xml并且一起上传到目标仓库。下面是发布到maven仓库的例子:
pply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://localhost/tmp/myRepo/")
        }
    }
}

本章笔记到此结束。


另外说明一下,由于Gradle 和 Android Studio更新较快,我的一些项目也逐渐升级到2.1版本。所以1.2的笔记应该不会全部写完。有什么不明白的,大家可以看一下文档。
另外,个人的Gradle翻译正在进行中,如果你对此有兴趣,请关注项目:https://github.com/msdx/gradledoc。
本文为Gradle阅读笔记,例子的代码来源于Gradle文档。

Gradle笔记——依赖管理基础的更多相关文章

  1. Gradle之依赖管理

    Gradle之依赖管理 泡在网上的日子 / 文 发表于2015-01-29 16:12 第8824次阅读 Gradle,Android Studio 2 编辑推荐:稀土掘金,这是一个针对技术开发者的一 ...

  2. 【转载】Gradle学习 第八章:依赖管理基础

    转载地址:http://ask.android-studio.org/?/article/10 This chapter introduces some of the basics of depend ...

  3. 在Eclipse中使用建立使用Gradle做依赖管理的Spring Boot工程

    前述: Gradle存在很长时间了,以前只知道Maven和ivy ,最近才知道有这个存在,因为以后要用这个了; 所以,要先学会怎么用这个工具,就从建立一个简单工程开始! 实际上以前是见过Gradle的 ...

  4. Gradle Maven 依赖管理

    仓库管理简介 本质上说,仓库是一种存放依赖的容器,每一个项目都具备一个或多个仓库. Gradle支持以下仓库格式: Ivy仓库 Maven仓库 Flat directory仓库 我们来看一下,对于每一 ...

  5. Chapter 7. Dependency Management Basics 依赖管理基础

    This chapter introduces some of the basics of dependency management in Gradle. 7.1. What is dependen ...

  6. gradle入门(1-2)gradle的依赖管理

    Gradle支持以下仓库格式: Ivy仓库 Maven仓库 Flat directory仓库 一.添加仓库 1.添加Ivy仓库 1.1.通过URL地址添加一个Ivy仓库 我们可以将以下代码片段加入到b ...

  7. Android Gradle统一依赖管理

    目的: 避免在依赖包出新版本时,需要对每个module中的build.gradle文件都进行修改(如appcompat-v7包),使用这种方式即只需一次修改. 方法一 在项目的根目录创建一个gradl ...

  8. Liferay7 BPM门户开发之43: Gradle依赖管理

    进入liferay v7.0,官方推荐使用Gradle进行依赖管理和发布,所以必须知道Gradle的用法,网上资料很多,不赘述 只写依赖管理的分类 一般用外部仓库依赖,也可以用本地文件依赖(依赖本地j ...

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

        开发任何软件,如何管理依赖是一道绕不过去的坎,软件开发过程中,我们往往会使用这样那样的第三方库,这个时候,一个好的依赖管理就显得尤为重要了.作为一个自动构建工作,Gradle对依赖管理有着很好 ...

随机推荐

  1. 博客迁移,新地址:bfsan.github.io

    博客的新内容会在新地址发布(暂时),后期可能会考虑做一个整合同步.

  2. sublime text3中设置Emmet输入标签自动闭合

    项目后端前一段时间从C#转成了JAVA,在开发的过程中,由于HTML对标签的语法很宽松,比如这样:<img src="" alt="">在标签的结尾 ...

  3. Hibernate的条件查询的几种方式

    1. 第一种,用?占位符,如: //登录(用?占位符) public List<UserPO> LoginUser(UserPO up)throws Exception{ Session ...

  4. CSS(一)解析浮动塌陷与清除浮动

    清除浮动方法 1.对父级设置适合CSS高度,父级元素撑开并且包含子元素. <p>固定高度</p> <div style="height: 50px;" ...

  5. Firebird数据库相关操作

    Firebird常用SQL 一.分页写法小例: 1 select first 10 templateid,code,name from template ; 2 select first 10 ski ...

  6. python序列化pickle/cPickle

    一.pickle/Cpickle简介 Python序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?这取决于你想要怎么保存,怎么重用,发送给谁.很多游 ...

  7. MySQL 连接的使用

    MySQL 连接的使用 在前几章节中,我们已经学会了如果在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据. 本章节我们将向大家介绍如何使用 MySQL 的 JOIN ...

  8. Python3 基础语法

    编码 默认情况下,Python 3源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -*- 标 ...

  9. Linux操作系统进程模型分析进程

    Linux操作系统简介 Linux拥有现代操作系统的功能,如真正的抢先式多任务处理,支持多用户内存,保护虚拟内存,支持SMP.UP,符合POSIX 标准联网.图形用户接口和桌面环境具有快速性.稳定性等 ...

  10. Dynamics CRM2016 Web Api之分页查询

    在dynamics crm web api还没出现前,我们是通过fetchxml来实现的,当然这种方式依旧可行,那既然web api来了我们就拥抱新的方式. web api中我们通过指定查询的条数来实 ...