8 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 {
    // 配置本地仓库
    mvaenLocal()
    // 配置中央仓库
    // jcenter()
    mavenCentral()
    // 自定义私服地址
    maven {
        url ''
    }
}

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

3. 依赖传递性

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

自动化依赖管理流程

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

4. 依赖阶段配置

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

关系图如下:

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

以上的四种配置选用的主要判断依据是:是否仅是运行阶段需要依赖或是否仅是测试阶段需要依赖。
仅运行阶段需要依赖使用 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 刷新导入
刷新导入

在 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版本冲突问题>>。

转载链接:https://www.jianshu.com/p/5b591cb03e54

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

推荐阅读更多精彩内容

  • 说明 本文主要介绍和Gradle关系密切、相对不容易理解的配置,偏重概念介绍。部分内容是Android特有的(例如...
    jzj1993阅读 15,566评论 1 62
  • 本文作者:黄少存,叩丁狼高级讲师。原创文章,转载请注明出处。 上一篇咱们讲解了 Gradle 构建项目的生命周期,...
    叩丁狼教育阅读 4,436评论 0 6
  • 在 Android Studio 构建的项目中,基于 Gradle 进行项目的构建,同时使用 Android DS...
    Ant_way阅读 7,323评论 0 16
  • 依赖管理是Gradle的一个亮点。在最好的情况下,你只需要在构建文件中添加一行代码,Gradle就可以从远程仓库下...
    sollian阅读 5,115评论 0 3
  • 你的心是璀璨的星空 你的孤独是无底的黑洞 那枪声, 是那恶俗、粗蠢的世俗射向你的枪林弹雨的声音 是你周遭难见光明、...
    刘蕊laurie阅读 164评论 0 0