1. 什么是依赖管理

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

1.1 依赖

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

1.2 发布

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

2. 依赖声明

以下是一个依赖声明的例子:
  1. apply plugin: 'java'
  2.  
  3. repositories {
  4. mavenCentral()
  5. }
  6.  
  7. dependencies {
  8. compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
  9. testCompile group: 'junit', name: 'junit', version: '4.+'
  10. }

这里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可能不需要。
  1. dependencies {
  2. compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
  3. }

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

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

5. 仓库

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

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

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

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

使用远程Ivy仓库:

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

使用本地Ivy仓库:

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

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


6. 打包发布

依赖配置也用于发布文件,我们称之为打包发布或发布。
插件对打包提供了完美的支持,所以我们只需要告诉Gradle要发布到哪里。这就需要在uploadArchives任务中添加一个仓库。
下面是发布到Ivy仓库的例子:
  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并且一起上传到目标仓库。下面是发布到maven仓库的例子:
  1. pply plugin: 'maven'
  2.  
  3. uploadArchives {
  4. repositories {
  5. mavenDeployer {
  6. repository(url: "file://localhost/tmp/myRepo/")
  7. }
  8. }
  9. }

本章笔记到此结束。


另外说明一下,由于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填坑记(一)

    gulp是基于Node.js的自动任务运行器.可以自动完成html.image.css和js等文件的检测.检查.合并.压缩.格式化等,并监听文件在改动后重复指定的这些步骤. 一.首先,我全局安装了gu ...

  2. vue中的eventBus

    在vue2中,父子组件传递数据,父组件可以直接传递数据进子组件,而子组件通过调用父组件传递进来的方法,将自己的数据传递回去. 那兄弟组件之间,或者是兄弟组件的子组件之间如何传递呢? 当然vuex是一种 ...

  3. angularjs中关于跨域设置白名单

    在config中注入$sceDelegateProvider服务使用resourceUrlWhitelist([])方法添加白名单 跨域时将method的属性设置为"jsonp"就 ...

  4. 利用gulp把本地文件移动到指定待发布文件夹

    一.目标 把本地的文件移动到待发布的文件中,把static_grab文件中file.txt所列文件列表移动到beta对应文件夹中: 二.实现 var gulp = require('gulp'), w ...

  5. java后台通过Servlet给用户发送手机短信验证码,第一次写勿喷,欢迎转载

    短信验证码跟自己在Servlet画的验证码不一样,我们不用管短信验证码是怎么产生的,我们只需要关注如何调用短信验证码,在短信验证码里面添加 自己需要的随机数或者其他的内容. 现在直接上流程 第一步找一 ...

  6. Spring错误之org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'bookService' is expected to be of type 'pw.fengya.tx.BookService' but was actually of type 'com.sun.proxy.$Proxy1

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cas ...

  7. ubuntu16.04下安装opencv

    source url:http://blog.csdn.net/zhuiqiuk/article/details/5308505811 1 依赖包sudo apt-get install build- ...

  8. LOG4J日志级别详解

    日志记录器(Logger)是日志处理的核心组件. org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别. Level 描述 ALL 各级包括自定义级别 ...

  9. Linux基础指令

    Linux基础指令 只写了最简单的一些文件操作,基本没有带参数 查看当前目录 pwd 跳转到某路径 cd 查看当前目录下的文件 ls ls -l // -l 查看详细信息 打开当前所在文件夹 open ...

  10. Twitter 架构优化之路--Twitter是如何做到每秒处理3000张图片的

    如今,Twitter每秒可以创建并保存3000张(20GB)的图片.2015年,Twitter甚至从对媒体存储策略的优化中节省出了600万美元. 但并非一开始就是这样的,2012年Twitter还主要 ...