文档章节

Gradle-user guide-第8章 依赖管理基础(译)

闪电
 闪电
发布于 2015/06/06 10:27
字数 1816
阅读 7
收藏 0
点赞 0
评论 0

第8章依赖管理基础

这章会介绍一些Gradle中的依赖管理的基础知识。

8.1什么是依赖管理

粗略地说,依赖由两方面组成。第一,Gradle需要知道项目要构建或者执行的东西,以便于可以找到它们,我们把这些项目需要的文件称作项目的依赖。第二,Gradle需要构建和上传项目所生成的东西,我们把生成的文件叫做项目的发布。让我们来在更多细节上看看这两方面。

大多数项目都不是完全独立的。它们需要其他项目构建的文件来被编译、测试等。例如,为了在项目中使用Hibernate ,需要在classpath中加入一些Hibernatejar文件;为了测试项目,需要在test classpath中加入一些额外的jar文件,比如说一个特定的JDBC驱动或者Ehcache JAR文件。 

这些文件就是项目的依赖。Gradle需要你告知它项目的依赖是什么,以便于它可以找到这些依赖,并使这些依赖在项目中是可用的。这些依赖可能需要从远程的Mavenlvy仓库下载,或者是从本地目录加载,或者当在一个多项目构建中时,依赖也可能是被其他项目构建出来的。我们称这个过程为“依赖解决”(dependency resolution)

经常地,项目的依赖本身会存在其他的依赖。举个例子,Hibernate 核心库需要在其classpath中申明依赖一些其他的库,才能够运行。因此,Gradle测试为你的项目执行测试的时候,它需要找到这些依赖,并使它们是可用的。我们称之为过渡依赖transitivedependencies)。

大多数项目的主要目的是构建出一些在本身项目之外的地方可以使用的文件。例如,如果你的项目产生一个java库,那么你需要去构建一个jar文件,可能也会需要去构建一个包含源代码的jar文件,以及一些注视文档,并且在某些地方去发布它们。

这些输出文件组成了项目的发布。Gradle会小心的为你处理这重要的工作,你申明你的项目的发布,Gradle会构建它们并且在发布它们。确切来说,发布(publishing)代表你想要去做的事情。你可能想要将文件拷贝到本地目录,或者是将它们上传到远程的Mavenlvy仓库,或者是你可能在多项目构建中的另一个项目中使用这些文件。我们将这个过程称为发布(publication)。

8.2申明依赖

让我们来看一下依赖的申明。这里有个基础的构建脚本:

例子8.1申明依赖

applyplugin: 'java'
 
repositories{
    mavenCentral()
}
 
dependencies{
    compile group:'org.hibernate',name:'hibernate-core',version:'3.6.7.Final'
    testCompile group:'junit',name:'junit',version:'4.+'
}

这里发生了什么呢?这个构建脚本描述了一些关于项目的内容。首先,申明需要hibernate核心库3.6.7.Final来编译项目代码。隐含地,在运行时需要hibernate核心库的依赖。构建脚本也同时申明依需要一个版本大于等于4.0junit来编译项目的测试代码。构建脚本也告知去Maven中心仓库查找任何依赖。接下里会进行详细的说明。

8.3依赖配置

依赖被分到配置里面,一项配置可以简单地称为一系列的依赖,我们称为依赖配置。你可以用它们申明项目的外部依赖。正如我们稍后将会看到的,它们也被用来申明项目的发布。

Java插件定义了许多标准的配置,这些配置描述了Java插件所使用的类路径(classpaths)。

下面列出了一些依赖配置项。

编译(compile

编译项目源代码所需要的依赖。

运行时(runtime

classes在运行时所需要的依赖,默认包含编译时依赖。

测试编译(testCompile

编译项目测试代码所需要的依赖,默认包含classes和编译时依赖。

测试运行时(testRuntime

执行测试所需要的依赖。默认包含编译、运行时、测试编译依赖。

各种插件添加进一步的标准配置。你也可以定义自定义配置。依赖配置中的定义和定制依赖配置的更多细节参考50.3部分。

8.4外部依赖

有许多类型的依赖是可以被定义的。外部依赖就是其中的一种。这种依赖的对象不在当前的构建项目中,它们在远程仓库或者是本地文件系统的一个目录中。

将如下代码添加到依赖配置中,就可以定义一个外部依赖。

例子8.2外部依赖的定义

dependencies{
   compile group : 'org.hibernate', name: 'hibernate-core', version:'3.6.7.Final'
}

外部依赖定义使用group、name、version属性。根据所使用的库不同,group和version是可选的。

有一种定义外部依赖的快捷方式,使用"group:name:version"格式的字符串。

例子8.3外部依赖的快捷定义

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

8.5仓库

Gradle是如何从外部依赖找到文件的呢?Gradle从仓库(repository)中寻找它们。仓库实际上是一堆文件的集合,这些文件通过group、name、version组织分类。Gradle支持很多仓库,比如Maven和Ivy,而且有不同的方式访问仓库,比如本地文件系统和HTTP。

默认地,Gradle没有定义任何仓库,在使用外部依赖之前,你需要定义至少一个仓库。一种选择是使用Maven central仓库。

例子8.4 使用 Maven central仓库

repositories{
   mavenCentral()
}

也可以使用远程的Maven仓库

例子8.5使用远程Maven仓库

repositories{
   maven{
       url "http://repo.mycompany.com/maven2"
    }
}

一个项目可能有多个仓库,Gradle会根据库的定义顺序来依次找到对应的依赖,如果找到了依赖,那么就不会在后面定义的仓库中寻找了。

 

8.6 发布产物

依赖位置也用来发布文件,这些文件被称为发布产物(publishing artifacts),或者通常称为产物(artifacts)。

插件做了一项很好的工作,定义项目的产物。因此你不需要告诉Gradle哪些需要发布。但是,你需要告诉Gradle将产物发布到哪个地方。方法是把库附在uploadArchives任务里。下面是一个发布到远程Ivy仓库的例子:

例子8.8发布到Ivy仓库

uploadArchives {
   repositories {
       ivy {
           credentials {
                username "username"
                password "pw"
           }
            url"http://repo.mycompany.com"
       }
    }
}

现在,当你执行Gradle uploadArchives,Gradle就会构建和上传你的Jar,Gradle也会生成一个Ivy.xml文件,并且也会将它与Jar文件一同上传。

你也可以发布到Maven仓库,语法有一点点不同,因为发布到Maven仓库需要应用Maven插件。这种情况下,Gradle会生成和上传一个pom.xml文件。

例子8.9发布到Maven仓库

apply plugin: 'maven'
 
uploadArchives {
   repositories {
       mavenDeployer {
           repository(url: "file://localhost/tmp/myRepo/")
       }
    }
}

本文转载自:http://blog.csdn.net/tudayu123/article/details/39207519

共有 人打赏支持
闪电
粉丝 74
博文 391
码字总数 6789
作品 0
海淀
技术主管
Gradle入门系列(5):创建多项目构建

转载: 本文由 伯乐在线 - JustinWu 翻译,黄利民 校稿。未经许可,禁止转载! 英文出处:petrikainulainen。欢迎加入翻译组。 尽管我们可以仅使用单个组件来创建可工作的应用程序,但有时候...

低至一折起
2017/12/05
0
0
Gradle入门系列(3):依赖管理

转载: 本文由 伯乐在线 - JustinWu 翻译。未经许可,禁止转载! 英文出处:Petri Kainulainen。欢迎加入翻译组。 在现实生活中,要创造一个没有任何外部依赖的应用程序并非不可能,但也是极...

低至一折起
2017/12/05
0
0
「译」JUnit 5 系列:环境搭建

原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发: Linesh 的博客:环境搭建 我的 Github:http://github.com/linesh-simplicity 2015年11月,......

Linesh
2016/09/17
54
0
读书笔记--Android Gradle权威指南(上)

最近看了一本书《Android Gradle 权威指南》,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所以打算写一篇读书笔记,将书中一些我个人觉得蛮有用的点记录、总结一下。 前言 首先,...

请叫我大苏
05/24
0
0
spring 简介(译)

文档地址:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#overview-getting-started-with-spring 1.启动 spring框架是一个轻量级的问题方案,可以为你的......

流光韶逝
2016/07/08
27
0
深入理解gradle编译-Android基础篇

9/27/2016 1:28:27 PM 深入理解gradle编译-Android基础篇 导读 Gradle基于Groovy的特定领域语言(DSL)编写的一种自动化建构工具,Groovy作为一种高级语言由Java代码实现,本文将对Gradle一些...

小米墨客
2016/10/12
3.6K
7
VMware 虚拟化与云计算-vSphere运维卷已经出版

《VMware虚拟化与云计算 vSphere运维卷》已经由中国铁道出版社出版 带10段、180分钟细致讲解视频;嵌入书中重点难点章节,实现二维码即扫即看 本书封底二维码下载包中包含全书图片的彩色版,...

王春海
2017/04/25
0
0
Gradle常用配置

1、Module默认是release模式,BuildConfig.DEBUG也一直是false。如果想继承app的模式,需要在Module的build.gradle中加入 app build.gradle依赖关系 参考文章库项目发布 2、setting.gradle中...

GalaxyBruce
2016/06/27
42
0
推荐阅读的多核编程技术书籍

多核编程技术好书推荐 多核程序设计技术——通过软件多线程提升性能 , 作 者: (孟加拉)阿克特(Akhter,S.),(美)罗伯茨(Roberts,J.) 著,李宝峰,富弘毅,李韬 译 本书从原理、技术...

晨曦之光
2012/03/09
318
1
使用Gradle构建多版本app

资源文件个性化处理 res目录下的都算资源文件(layout、values、drawable、mipmap) 在build.gradle中定义productFlavors buildToolsVersion "24.0.2"defaultConfig {applicationId "com.atea......

atearsan
2016/09/19
24
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MacOS和Linux内核的区别

导读 有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我...

问题终结者
10分钟前
1
0
SpringBoot | 第八章:统一异常、数据校验处理

前言 在web应用中,请求处理时,出现异常是非常常见的。所以当应用出现各类异常时,进行异常的捕获或者二次处理(比如sql异常正常是不能外抛)是非常必要的,比如在开发对外api服务时,约定了响...

oKong
18分钟前
0
0
mysql高级

一、存储引擎 InnoDB MyISAM 比较 二、数据类型 整型 浮点数 字符串 时间和日期 三、索引 索引分类 索引的优点 索引优化 B-Tree 和 B+Tree 原理 四、查询性能优化 五、切分 垂直切分 水平切分...

丁典
38分钟前
1
0
rsync通过同步服务、系统日志、screen工具

rsync通过后台服务同步 在远程主机中建立一个rsync服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。 首先在A机器上建立并且配置rsync的配...

黄昏残影
今天
4
0
Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
今天
110
2
流利阅读笔记31-20180720待学习

克罗地亚:输了世界杯,却赢了全世界 雪梨 2018-07-20 1.今日导读 1998 年,年轻的克罗地亚国家队在法国世界杯给全世界留下了不可磨灭的印象,格子军团一举夺得了季军。4 年后,克罗地亚折戟...

aibinxiao
今天
3
0
OSChina 周五乱弹 —— 我们是食物链的最底层

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...

小小编辑
今天
775
14
Android Studio 3.0 之后打包apk出现应用未安装问题

1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...

她叫我小渝
今天
0
0
前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部