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. gulp将多张小图自动合成雪碧图

    最近一直在做移动端的改版项目,做之前老大就跟我说了好几次,说这次改版一定要用雪碧图减少一个页面的图片的请求次数,能加快页面的加载速度就一定要加快,我说可以.因为之前的项目开发时间过短,也没有时间去慢慢 ...

  2. Window下使用ftp命令往Linux中发送文件

    操作步骤:首先,切换到文件目录1.ftp ip地址2.连接成功后,输入正确的用户名和密码.3.binary(表示以二进制的格式传送)4.put/get 文件名(或文件的绝对路径) 退出:bye

  3. python中删除某个元素的3种方法

    python中关于删除list中的某个元素,一般有三种方法:remove.pop.del 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 举例说明: >>> st ...

  4. Oracle中的列转行例子详解

    数据如下:name id张三 1,2,3 要求实现:name id张三 1张三 2张三 3 --创建临时表 create table tmp as(select '张三' name, '1,2,3' ...

  5. CentOS 7安装Python3.5,并与Python2.7兼容并存

    CentOS7默认安装了python2.7.5,当需要使用python3的时候,可以手动下载Python源码后编译安装.1.安装python3.5可能使用的依赖1 yum install openss ...

  6. 实验-使用VisualVM或JConsole进行对程序进行性能分析

    参考资料: 性能分析神器VisualVM java可视化监控工具 完成下列任务: 1.分析内存堆 使用+进行频繁的字符串拼接 2.CPU性能分析 3.线程分析 编程比较以下几个方法所创建的线程 Exe ...

  7. Mybatis 批量插入、批量更新

            合理的使用批量插入.更新对性能优化有很大的作用,速度明显快了N倍.         要注意数据库连接串后面要新增:&allowMultiQueries=true,表示一个sql ...

  8. 从0到1:制作你的苹果podcast(播客)

    注意:本文不是教你如何录音.如何做后期的文章.而是聚焦于如何搭建播客(podcast)需要的环境. 本文科普类文章,干货少,湿货多. 先选一个主机吧 这步的初衷和你自己建站是一样的.你可以购买一个独立 ...

  9. (译)openURL 在 iOS10中已弃用

    翻译自:openURL Deprecated in iOS10 译者:Haley_Wong 苹果在iOS 2 推出了 openURL:方法 作为一种打开外部链接的方式.而与之相关的方法 canOpen ...

  10. Cocos2D-ObjC:在RPG游戏中混合Swift代码

    我之前写过一个RPG游戏<<熊猫之魂 SoulOfPanda>> 编译器使用的是SpriteBuilder,很好很强大!全部代码都由Objc完成,现在想尝试一下在其中混入Swi ...