Gradle 依赖管理
2016-03-25 18:59
302 查看
仓库管理简介
本质上说,仓库是一种存放依赖的容器,每一个项目都具备一个或多个仓库。Gradle支持以下仓库格式:
Ivy仓库
Maven仓库
Flat directory仓库
我们来看一下,对于每一种仓库类型,我们在构建中应该如何配置。
在构建中加入Ivy仓库
我们可以通过URL地址或本地文件系统地址,将Ivy仓库加入到我们的构建中。如果想通过URL地址添加一个Ivy仓库,我们可以将以下代码片段加入到build.gradle文件中:
Section 50.6.6 Ivy Repositories of the Gradle User Guide
The API documentation of the IvyArtifactRepository
我们继续,下面是如何在构建中加入Maven仓库。
在构建中加入Maven仓库
与Ivy仓库很类似,我们可以通过URL地址或本地文件系统地址,将Maven仓库加入到我们的构建中。如果想通过URL地址添加一个Maven仓库,我们可以将以下代码片段加入到build.gradle文件中:
mavenCentral()别名,表示依赖是从Central Maven 2 仓库中获取的。
jcenter()别名,表示依赖是从Bintary’s JCenter Maven 仓库中获取的。
mavenLocal()别名,表示依赖是从本地的Maven仓库中获取的。
如果我们想要将Central Maven 2 仓库加入到构建中,我们必须在build.gradle文件中加入以下代码片段:
section 50.6.4 Maven Repositories of the Gradle User Guide
我们继续,下面是如何在构建中加入Flat Directory仓库。
在构建中加入Flat Directory仓库
如果我们想要使用Flat Directory仓库,我们需要将以下代码片段加入到build.gradle文件中:Section 50.6.5 Flat directory repository of the Gradle User Guide
Flat Dir Repository post to the gradle-user mailing list
我们继续,下面要讲的是,如何使用Gradle管理项目中的依赖。
依赖管理简介
在配置完项目仓库后,我们可以声明其中的依赖,如果我们想要声明一个新的依赖,可以采用如下步骤:指定依赖的配置。
声明所需的依赖。
让我们看一下详细步骤:
配置中的依赖分类
在Gradle中,依赖是按照指定名称进行分类的,这些分类被称为配置项,我们可以使用配置项声明项目的外部依赖。Java插件指定了若干依赖配置项,其描述如下:
当项目的源代码被编译时,compile配置项中的依赖是必须的。
runtime配置项中包含的依赖在运行时是必须的。
testCompile配置项中包含的依赖在编译项目的测试代码时是必须的。
testRuntime配置项中包含的依赖在运行测试代码时是必须的。
archives配置项中包含项目生成的文件(如Jar文件)。
default配置项中包含运行时必须的依赖。
我们继续,下面是如何在项目中声明依赖。
声明项目依赖
最普遍的依赖称为外部依赖,这些依赖存放在外部仓库中。一个外部依赖可以由以下属性指定:group属性指定依赖的分组(在Maven中,就是groupId)。
name属性指定依赖的名称(在Maven中,就是artifactId)。
version属性指定外部依赖的版本(在Maven中,就是version)。
小贴士:这些属性在Maven仓库中是必须的,如果你使用其他仓库,一些属性可能是可选的。打个比方,如果你使用Flat directory仓库,你可能只需要指定名称和版本。
我们假设我们需要指定以下依赖:
依赖的分组是foo。
依赖的名称是foo。
依赖的版本是0.1。
在项目编译时需要这些依赖。
我们可以将以下代码片段加入到build.gradle中,进行依赖声明:
我们已经学习了依赖管理的基础知识,下面我们来实现一个演示程序。
创建演示程序
演示程序的需求是这样的:演示程序的构建脚本必须使用Maven central仓库。
演示程序必须使用Log4j写入日志。
演示程序必须包含包含单元测试,保证正确的信息返回,单元测试必须使用JUnit编写。
演示程序必须创建一个可执行的Jar文件。
我们来看一下怎样实现这些需求。
配置仓库
我们的演示程序的一个需求是构建脚本必须使用Maven central仓库,在我们使用Maven central仓库配置构建脚本后,源代码如下:依赖声明
在build.gradle文件中,我们声明了两个依赖:Log4j(版本1.2.17)用来记录日志。
JUnit(版本4.11)用来编写单元测试。
在我们声明了这些依赖后,build.gradle文件是这样的:
编写代码
为了实现我们演示程序的需求,“我们不得不过度工程化一下”,我们会按照下列步骤创建程序:创建一个MessageService类,当其中的getMessage()方法被调用时,返回字符串“Hello World!”。
创建一个MessageServiceTest类,确保MessageService类中的getMessage()方法返回字符串“Hello World!”。
创建程序的主类,从MessageService对象获取信息,并使用Log4j写入日志。
配置Log4j。
我们按部就班的操作一下。
首先,在src/main/java/net/petrikainulainen/gradle目录下新建一个MessageService类并加以实现,代码如下:
执行测试
我们可以通过以下命令执行测试。哪一个测试失败了。
执行了几个测试,其中几个失败了。
测试报告的位置,测试报告提供了失败(或成功)的测试的额外信息。
当我们执行单元测试时,Gradle会在相应目录创建测试报告:
build/test-results目录包含每次测试执行的原始数据。
build/reports/tests目录包含一个HTML报告,描述了测试的结果。
HTML测试报告是一个非常有用的工具,因为它描述了测试失败的原因。比如说,如果我们的单元测试认为MessageService类中的getMessage()方法返回字符串“Hello Worl1d!”,那么HTML报告看上去就像下图一样:
我们继续,下面是如何打包和运行我们的演示程序。
打包和运行程序
我们能够可以使用以下任意一种命令打包程序:gradle assembly或gradle build,这两个命令都会在build/libs目录中创建dependency-management.jar文件。当我们使用java -jar dependency-management.jar命令运行演示程序时,我们可以看到如下输出:
解决这个问题最简单的方式是创建一个所谓的“胖”Jar文件,即把所有程序运行所需的依赖都打包到Jar文件中去。
通过查阅Gradle Cookbook中的教程,可以修改构建脚本,如下:
相关文章推荐
- poj-2739-Sum of Consecutive Prime Numbers
- Git的安装与配置
- xib创的view修改frame
- Android之SharedPreferences读写数据
- Myeclipse:No projects are available for deployment to this server!
- 设计模式系列(六)——桥接模式
- 大整数比较大小
- linux中vsftpd配置文件详解
- 排列<一>
- Random/Stochastic
- 排序---对二维数组的排序
- 链式队列的实现
- CentOS下安装memcached
- win8.1系统安装密钥序列号
- popuwindow使用
- Chrome无法打开文件的错误 [Not allowed to load local resource: file://XXXX]
- 互斥锁和自旋锁
- maven命令
- 通过显式Intent启动另一个Activity
- StringUtils的isBlank与isEmply详解