08 Gradle 入门-依赖管理

文章来源

上一篇咱们讲解了 Gradle 构建项目的生命周期,这一篇咱们来看下 Gradle 的另一个重要的知识点,就是依赖管理,那为什么需要依赖管理呢?

依赖管理

几乎所有基于 JVM 的软件项目都需要依赖外部的类库来重用现有的功能代码.自动化依赖管理可以明确依赖的版本,能解决传递性依赖带来的版本冲突问题.
而Gradle 就满足这两个条件,以下就来看下依赖管理的关键点.

依赖管理关键点

1.工件坐标(jar 包标志):

  • group : 指明 jar 包所在的分组
  • name : 指明 jar 包的名称
  • version: 指明 jar 包的版本
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    // 简写
    // testCompile 'junit:junit:4.12'
}

在 dependencies 中指明依赖的 jar 包

2. 仓库(jar 包的存放位置)

  • 公共仓库(中央仓库)
    Gradle 没有自己的中央仓库,可配置使用 Maven 的中央仓库:mavenCentral/jcenter
  • 私有仓库
    配置从本地 maven 仓库中获取依赖的 jar 包,不远程加载 jar 包,使用 mavenLocal
  • 自定义 maven 仓库
    自定义仓库来源,一般指向公司的 Maven 私服.(普片做法)
  • 文件仓库
    本地机器上的文件路径,一般不使用,没有意义,因为构建工具的目的就是去除本机的影响,可以在任何地方公用同一份仓库数据,跟本机关联上就没有太大的意义,当然特殊情况下除外.
repositories {
    // 配置本地仓库
    mavenLocal()
    // 配置中央仓库
    // jcenter()
    mavenCentral()
    // 自定义私服地址
    maven {
        url ''
    }
}

在 repositories 中配置仓库的指向,在这里面可配置多个仓库,会按配置的顺序去查找jar包,找到则获取,找不到继续到下一个配置的仓库去查找.一般是在最前面配置公司的私服,使用自定义仓库方式配置.

3. 依赖传递性

比如: A 依赖 B,如果 C 依赖 A,那么 C 依赖 B
就是因为依赖的传递性,所以才会出现版本的冲突问题.以下通过一张图来了解下Gradle 的自动化依赖管理流程.

image.png

由图可得知,Gradle 工具从远程仓库下载 jar 包到本地仓库,Gradle 工具需要依赖配置文件,如果同一个 jar 经常使用会被存入到依赖缓存中.

4.依赖阶段配置

在 build.gradle 中的 dependencies 中配置依赖,依赖分以下四种依赖.
源码依赖: compile , runtime
测试依赖: testCompile, runtime

关系图如下:


image.png
  • compile 配置依赖的 jar ,测试代码编译和运行以及源码运行一定存在.
image.png
  • runtime 配置依赖的 jar,只有源码运行和测试运行存在.
image.png
  • testCompile 配置依赖的 jar,测试代码的编译和运行存在.
image.png
  • testRuntime 配置依赖的 jar,只有测试代码的运行存在.
image.png

以上的四种配置选用的主要判断依据是是否仅是运行阶段需要依赖或是否仅是测试阶段需要依赖.
仅运行阶段需要依赖使用 runtime ,如果仅是测试阶段需要依赖加 test 前缀 testCompile 或 testRuntime.

以上是依赖管理的配置和概念点的讲解,接下来咱们来实际配置一个依赖,来为项目加入一个logbok依赖.

5. 加入 logbok 依赖

5.1 到中央仓库查找 logbok 的配置
http://mvnrepository.com/search?q=logback
5.2 拷贝配置到 build.gradle 中配置依赖

dependencies {
    testCompile 'junit:junit:4.12'
    testCompile 'ch.qos.logback:logback-classic:1.2.3'
}

5.3 刷新导入

image.png

在 test 包下书写 MyTest.java 文件

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyTest {
    private static final Logger LOGGER = LoggerFactory.getLogger(MyTest.class);

    public static void main(String[] args) {
        LOGGER.info("logback 测试");
    }
}

以上咱们就把日志依赖的 jar 导入到了项目,现在项目就可以使用日志了.
logback 下的两个包为 logback 依赖的 jar 包,由于依赖的传递性,所以目前项目的测试代码也依赖了这两个包,比如slf4j.
如果此项目引入了其他的 jar 包,而这些 jar 也依赖了slf4j,但是版本不一样的情况下就存在了版本冲突问题,像版本冲突在开发中是经常遇到的,那么在 Gradle 中如何解决版本冲突呢? 请期待下一篇 <<Gradle版本冲突问题>>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 在 Android Studio 构建的项目中,基于 Gradle 进行项目的构建,同时使用 Android DS...
    Ant_way阅读 7,322评论 0 16
  • 上一篇咱们讲解了 Gradle 构建项目的生命周期,这一篇咱们来看下 Gradle 的另一个重要的知识点:依赖管理...
    Java_Explorer阅读 1,918评论 0 0
  • 本文作者:黄少存,叩丁狼高级讲师。原创文章,转载请注明出处。 上一篇咱们讲解了 Gradle 构建项目的生命周期,...
    叩丁狼教育阅读 4,430评论 0 6
  • 转载:本文由 伯乐在线 - JustinWu 翻译。未经许可,禁止转载!英文出处:Petri Kainulaine...
    低至一折起阅读 838评论 0 0
  • 4月25,周一,周末两天,觉得既长,又短。周末这两天,忙得不行,一是因为他三叔来了,二是因为娃娃参加的跳舞表演,原...
    柏家姓阅读 189评论 0 0