Gradle用户指南(章8:依赖关系管理基础)
章8:依赖关系管理基础
本章将介绍一些gradle依赖关系管理的基础
- 什么是依赖关系管理?
简略的说,依赖管理是由两部分组成的。首先,gradle需要知道你要构建或者运行的项目,以便找到它们。我们将这些导入的文件视为项目的依赖。第二,gradle需要构建或者打包你的项目产品。我们将这些导出的文件视为项目的发布。下面,让我们在细节上更多的了解这两个方面。
大部分项目都不是完全彻底的独立的。它们需要其他项目的构建文件,以便编译、测试等等。例如,为了在我的项目中使用Hibernate,当编译我的源文件时就需要在classpath添加一些Hibernate的jar包。为了运行测试,我需要在test classpath下添加另外一些jar包,比如独有的jdbc驱动、java的缓存框架。
这些项目依赖需要导入的文件。Gradle允许你告诉它你的项目依赖哪些文件,所以它才关心查找哪些依赖,并有效的导入到你项目中。这些依赖可能在远程Maven or Ivy下载,也可能在本地仓库中,或者是多项目构建中的另外的项目。我们把这个过程叫做依赖解析。
注意,该特性是gradle相对ant的优势所在。在ant中,你只能加载指定绝对路径或者相对路径的jar包。使用gradle,只需在依赖中声明这些"names"和层次结构就可以确定在哪里获取这些文件。你可以添加apache ivy来获取ant的类似操作,单gradle可以做的更好。
项目的依赖文件本身常常也有自己的依赖。例如,运行Hibernate核心库需要在classpath中声明数个其他类库。所以,当gradle测试你的项目时,也需要寻找并加载这些依赖文件。我们可以称其为依赖传递。
大多数项目的主要目标是构建一些可以在项目外运行的文件。例如,你的项目产品是一个java库,就需要构建一个jar包,或者一个jar源文件和一些文档,并在某些地方发布他们。
Gradle也负责发布项目文件这个重要工作。你声明项目的发布包,gradle负责构建并发布他们。恰好,这些发布包依赖于你想做的工作。你可能想复制这些文件到本地目录,或者上传到远程Maven or Ivy仓库,或者在多项目中的其他项目中使用。我们一般称这个过程为发布。
- 声明你的依赖
让我们来看一些依赖声明。下面是一个基础的构建脚本:

这里发生了什么呢?这个构建脚本描述了这个项目的少许内容。首先,它规定了编译项目源文件需要Hibernate core 3.6.7.Final,也就是说Hibernate core的依赖在运行中是必须的。同时,这个脚本也规定了测试项目需要任意junit >= 4.0版本库。它也向gradle表明需要访问maven中央仓库寻找依赖文件。接下来的片段我们会有更详细的描述。
- 依赖配置项
Gradle中依赖关系根据配置项分组,一个配置项包含一组简单命名的依赖。我们将引用这些配置项。你可以使用它们为你的项目声明外部依赖。正如我们随后将要看到的,他们也被用来声明你的项目产品。
Java插件定义了许多标准的配置项。这些配置代码java插件所用的classpath。下面我们列出了一些常用项,当然你也可以在Table 23.5, "Java plugin - dependency configurations"中查看更多详情。
Compile
在编译项目源代码时需要的依赖
Runtime
运行项目classes需要的依赖。默认情况下,它也包含编译时依赖。
TestCompile
编译项目测试源代码时需要的依赖。默认情况下,它也包含编译的源文件及编译时依赖。
testRuntime
运行测试需要的依赖。默认情况下,它也包含编译、运行、测试编译时依赖。
不同的插件提供不同的更深入的标准的配置项。你也可以在你的构建脚本中定义自己独有的配置项。请在 Section 51.3, "Dependency configurations" 中查看定义配置项详情。
- 外部依赖
你可以声明各种类型的依赖。其中一种就是外部依赖,它依赖于当前构建外的一些文件。这些外部文件存储在一些仓库中,例如maven,Ivy或者本地文件系统。
定义一个外部依赖并添加到配置项中:

一个外部依赖可以用组、名称、版本等属性标识。这依赖于你所使用的仓库,组和版本是可选项,声明依赖的语法类似于:"group:name:version"。

寻求更多依赖定义和工作: Section 51.4, "How to declare your dependencies".
- 仓库
Gradle是怎么找到外部依赖文件的呢?gradle首先从仓库中寻找,一个仓库中集合了许多被分组、命名、版本组织的文件。Gradle能辨识不同的仓库类型例如maven、ivy,并且可以以不同的方式去访问这些仓库如本地文件系统、http等。
缺省时,gradle没有定义任何仓库。在使用外部依赖前,你最少需要定义一个仓库。其中一个选择就是maven中央仓库:

当然也可以是一个远程maven仓库:

或者是一个远程ivy仓库:

最后,你也可以把仓库设置在本地文件系统中。这种方式对maven、ivy都是有效的。

一个项目可以有许多仓库。Gradle会根据声明顺序在这些仓库中检索依赖,当检索到指定模块时停止检索。
To find out more about defining and working with repositories, have a look at Section 51.6, "Repositories".
- 发布项目工件
依赖配置项也可以在发布文件中使用。我们通常称其为发布工件或者仅仅是工件。插件对项目发布工件的支持非常好,通常你不必向gradle声明需要发布什么。无论如何,你还是需要声明在哪里发布这些工件。你可以通过在uploadArchives任务附上仓库来实现发布工作。下面是一个发布到远程ivy仓库的示例:

现在,当你执行gradle uploadArchives,gradle就会构建并上传你的jar包。Gradle也会同时生成并上传一个ivy.xml。
当然,你也可以发布到maven中央仓库中。这些语法有些微的不同。注意,发布到maven仓库中需要添加maven插件。当配置完成,gradle会生成并上传一个pom.xml。

To find out more about publication, have a look at Chapter 52, Publishing artifacts.
- 下一章是什么?
如果你对dsl感兴趣,可以进入章9查看详情。
Gradle用户指南(章8:依赖关系管理基础)的更多相关文章
- Gradle用户指南(章9:Groovy快速入门)
Gradle用户指南(章9:Groovy快速入门) 你可以使用groovy插件来构建groovy项目.这个插件继承了java插件的功能,且扩展了groovy编译.你的项目可以包含groovy代码.ja ...
- 《gradle 用户指南中文版》目录
gradle 用户指南 版权所有©2007-2017 Hans Dockter,Adam Murdoch只要您不对这些副本收取任何费用,并且进一步规定,每个副本都包含本版权声明,无论是以印刷版还是电子 ...
- 90%的人都不知道的Node.js 依赖关系管理(下)
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/node-dependency-manage ...
- 90%的人都不知道的Node.js 依赖关系管理(上)
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/nodejs-dependency-mana ...
- 微服务下 Spring Boot Maven 工程依赖关系管理
单体 Spring Boot Maven 工程 最基本的 pom.xml 包含工程信息.Spring Boot 父工程.属性配置.依赖包.构建插件 <?xml version="1.0 ...
- OSGI中的service依赖关系管理
众所周知.对于高动态高可扩展的应用,OSGI是一个很好的平台.可是.也因此添加了复杂性.开发中对service的依赖变得复杂. 这也是service的关系管理成为OSGI中一个很重要的部分,我们来看看 ...
- 《gradle 用户指南中文版》 第1章、简介
第1章.简介 目录 1.1 关于本用户指南 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具. 这里我们将介绍Gradle,我们认为gradle让java项 ...
- Gradle用户指南
下载安装gradle 2.1 下载地址:http://www.gradle.org/learn 安装先决条件:gradle安装需要1.6或者更高版本的jdk(jre)(可以使用java –versio ...
- Gradle用户指南(3)-构建Java项目
1.构建基本的Java项目 为了使用 Java 插件,添加下面代码到构建文件: build.gradle apply plugin: 'java' 这个就是 定义一个 Java 项目的全部.它会将 J ...
随机推荐
- MySQL使用Union创建视图报错
mysql> select * from test_main; +----+-------+ | id | value | +----+-------+ | 1 | ONE | | 2 ...
- python命令行下tab键补全命令
在python命令行下不能使用tab键将命令进行补全,手动输入又很容易出错. 解决:tab.py #/usr/bin/env python # -*- coding:utf-8 -*- ''' 该模块 ...
- sql数据库带补全终端命令
mysql pip install mycli pgsql pip install pgcli 都是python脚本,记录备忘.
- 【VB技巧】VB ListView 控件功能使用详解
来源:http://lcx.cc/?i=494 ListView控件 在工具箱上击鼠标右键,选择快捷菜单的Components(部件)项,在控件列表中选择Microsoft Windows Commo ...
- 《黄聪:手机移动站SEO优化教程》4、如何实现手机移动网站和PC站点的自主适配
视频地址:http://www.tudou.com/programs/view/v4Hur5vjav4/ 1.自主适配 A:站点自己做好PC与手机之间的适配,以及手机站各个版式之间的适配.当手机用户通 ...
- MVC 安装
mvc 4 支持window xp,window 7,window 8, mvc 4 支持vs2010,vs2012 vs2012中包含mvc4; vs2010中需要安装mvc4 安装包:
- Redis 内存使用优化与存储
Redis 常用数据类型 Redis 最为常用的数据类型主要有以下五种: • String • Hash • List • Set • Sorted set 在具体描述这几种数据类型之前,我们先通过一 ...
- Spark参数配置说明
1 修改$SPARK_HOME/conf目录下的spark-defaults.conf文件 添加以下配置项 spark.sql.hive.convertMetastoreParquet ...
- DBA_Oracle冷备份案例脚本本法(案例)
2014-08-10 Created By BaoXinjian
- KMP算法的Next数组详解 转
这个写的很好,还有讲kmp,值得一看. http://www.cnblogs.com/tangzhengyue/p/4315393.html 转载请注明来源,并包含相关链接. 网上有很多讲解KMP算法 ...