文档章节

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

闪电
 闪电
发布于 2015/06/06 10:27
字数 1816
阅读 7
收藏 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
博文 392
码字总数 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 Boot极简教程》第8_章: Spring Boot集成Groovy混合Java开发

第8_章: Spring Boot集成Groovy混合Java开发 本章我们使用SpringBoot集成Groovy混合Java开发一个极简的RestAPI。 数据库使用mysql,ORM层使用mybatis,模板引擎使用freemarker,构建工具使用...

程序员诗人
2017/04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

docker update:更新一个或多个容器的配置

更新容器的配置 docker update:更新一个或多个容器的配置。 具体内容请访问:https://docs.docker.com/engine/reference/commandline/update/#options 语法:docker update [OPTIONS] CONTA...

lwenhao
29分钟前
1
0
unload事件

unload事件不触发的原因分析 1.代码位置不对,应该优先加载,不能放到回调函数中 2.浏览器不支持 3.最可能的原因,unload事件中触发的函数是一个异步执行的函数,浏览器是不允许在窗口关闭之后在...

狮子狗
42分钟前
1
0
DbForge Schema Compare for MySQL入门教程:如何连接到数据库

【dbForge Schema Compare for MySQL下载】 要创建连接: 1. 在“Connection” 工具栏上单击“New Connection”按钮 。 2. 在“Host” 框中输入主机名。 3. 在“Port” 框中输入端口信息。默...

Miss_Hello_World
44分钟前
1
0
公众号关联微信小程序

公众号关联小程序发送关联通知,对于推广小程序有着很大的帮助。所以问题来了,怎么做到在公众号关联小程序发送关联通知呢? 一:开发中遇到的问题 之前在开发过程中发现,公众号已经关联小程...

Code辉
57分钟前
1
0
并发编程基础之JMM学习摘要

一、JMM定义 Java内存模型即Java Memory Model(JMM),JMM决定一个线程对共享变量的写入何时对另一个线程可见(内存可见性),从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程...

狠一点
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部