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. EM vs REM vs PX,为什么你不应该”只用px“”

    Actually this artical is from other person's opnion ,i just put it into chinese,and this means a ver ...

  2. TortiseGit 添加SSH-Key

    TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥.使用命令ssh-keygen -C "邮箱地址" -t rsa产生的密钥在Tortoi ...

  3. Oracle 11g 中SQL性能优化新特性之SQL性能分析器(SQLPA)

    Oracle11g中,真实应用测试选项(the Real Application Testing Option)提供了一个有用的特点,叫SQL性能分析器(SQL Performance Analyze ...

  4. 解决问题redis问题:ERR Client sent AUTH, but no password is set

    是的,这又是一个坑爹的问题. 明明在redis.conf中设置了密码,而且redis还启动了,为什么说没有密码呢? 大家都知道linux下启动redis有很多种方法, 其中有 ./redis-serv ...

  5. south 命令学习

    south 命令学习 概述 在django某个版本之前,django自身提供一个创建数据库的命令-syncdb,它会根据model来创建相应的表,但是这个命令不好的地方在于,如果想要对model进行更 ...

  6. render函数data参数中的model选项

    官方文档没有说, 但是编译v-model时, 是有model这个选项的, 例如: _c('el-input', { attrs: { "placeholder": "手机 ...

  7. 在安卓代码中dp 和 sp 换算px

    /** * 单位转换工具 * * @author carrey * */ public class DisplayUtil { /** * 将px值转换为dip或dp值,保证尺寸大小不变 * * @p ...

  8. Lucene 6.0下使用IK分词器

    Lucene 6.0使用IK分词器需要修改修改IKAnalyzer和IKTokenizer. 使用时先新建一个MyIKTokenizer类,一个MyIkAnalyzer类: MyIKTokenizer ...

  9. Android的Intent机制详解

    Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作.尽管 Intent 可以通过多种方式促进组件之间的通信,但其 基本用例主要包括以下三个: 启动 Activity: Activit ...

  10. 下载Android源代码编译错误总结

    错误1: prebuilts/sdk/api/18.txt:22055: error 9: Removed public method android.telephony.gsm.SmsMessage ...