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 ...
随机推荐
- Javascript中函数的四种调用方式
一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...
- android学习笔记24——事件处理
事件处理 android提供了两种事件处理机制: 1.基于回调的事件处理 2.基于监听器的事件处理(通过绑定特定事件监听器) 注意: android对于基于回调的事件处理而言,主要做法就是重写andr ...
- linux中cat、more、less命令区别详解
众所周知linux中命令cat.more.less均可用来查看文件内容,主要区别有:cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况:m ...
- SqlServer统计最近一周的数据
select * from 表名 where DATEDIFF( day, 日期字段列名,getdate())<7 and DATEPART(w, 日期字段列名) <DATEPART( ...
- 使用mongo-java-driver3.0.2.jar和mongodb3.0在java代码中的用户验证4
以下是使用mongo-java-driver3.0.2.jar和mongodb3.0.4在java代码中的用户验证: ServerAddress sa = new ServerAddress(host ...
- Sublime text2用户自定义配置
[{ "keys": ["ctrl+d"], "command": "run_macro_file", "ar ...
- windows7修改双系统启动项名称、先后顺序、等待时间
一.进入BCDEdit.exe 正常启动Windows 7 系统,点击“开始” -> “所有程序” -> “附件”,右击“命令提示符” -> “以管理员身份运行”(需要将操作当前用 ...
- (C#) Lock - 将对象上锁,互斥多个线程,使同步。
C# Lock 原文:http://www.dotnetperls.com/lock Locking is essential in threaded programs. It restricts c ...
- The dependency `BaiduMapKit` is not used in any concrete target
RubertdeMacBook-Pro:项目名 Rubert$ pod install Analyzing dependencies [!] The dependency `BaiduMapKit` ...
- storm的作业单元:Topology
Storm系统的数据处理应用单元,是被打包的被称为Topology的作业. 它是由多个数据处理阶段组合而成的,而每个处理阶段在构造时被称为组件(Component),在运行时被称为任务. 那么,组件根 ...