Gradle的基本使用(三)

Gradle的设计理念是,所有有用的特性都由Gradle插件提供,例如编写一个Java项目时,需要使用到 Java 插件, 它会将许多任务自动的加入到你项目里。Gradle本身提供了一系列的标准插件,无需多余配置只需要在你的build.gradle文件中加入 apply plugin: 'java'

Gradle插件

这样就可以引入许多task,只需要使用相应的task命令就可以进行项目构建。例如下列一些task:

  1. gradle build:编译整个项目,它会执行代码编译、代码检测和单元测试等
  2. gradle assemble:编译并打包你的代码, 但是并不运行代码检测和单元测试
  3. gradle clean:删除 build 生成的目录和所有生成的文件
  4. gradle check:编译并测试你的代码。其它的插件会加入更多的检查步骤,如使用 checkstyle、pmd、findbugs

Gradle各个task的关系图:
Gradle的基本使用(三)_第1张图片tasks

从上图可以看出,我们通常在执行一个build命令时其实是将一些零散的命令批量执行了,我们也可以根据自己的需求执行其中某一个命令。

外部依赖

通常, 一个 Java 项目将有许多外部的依赖, 既指向外部的 JAR 文件. 为了在项目里引用这些 JAR 文件, 你需要告诉 Gradle 去哪里找它们. 在 Gradle 中, JAR 文件位于一个仓库中,这里的仓库类似于 maven 的仓库。

首先,指定maven的仓库地址:

1
2
3
repositories {
	mavenCentral()
}

mavenCentral() 是Gradle内置的一个maven仓库地址,加入maven仓库后,就可以直接加入maven仓库中的外部依赖,如果这个外部依赖不存在,gradle会联网去maven仓库中自动下载它,并将它缓存到本地,下次再使用时会优先从本地缓存中查找该依赖。

1
2
3
4
5
dependencies {
	compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
	// 简化写法
	// compile 'commons-collections:commons-collections:3.2'
}

引用一个外部依赖需要指定使用的group, name 和 version 属性,三者缺一不可。那从哪里得知JAR包的这三个属性呢?我们可以从mvnrepository中搜索到。

本地依赖

Gradle也可以从本地目录中引入JAR包依赖,可以单一引入指定的某一JAR包,也可以引入某目录下所有的JAR包

1
2
3
4
dependencies {
	compile files('dir/file.jar')
	compile fileTree(dir: 'libs', include: '*.jar')
}

项目依赖

往往一个完整的项目由多个子项目构成。在Gradle中,使用文件settings.gradle定义当前项目的子项目。默认情况下,每个子项目的名称对应着当前操作系统目录下的一个子目录。

1
include 'sub-project1', 'sub-project2', 'sub-project3'

如sub-project1依赖sub-project2,则在sub-project1的build.gradle中加入以下配置即可:

1
2
3
dependencies {
	compile project(':sub-project2')
}

依赖关系管理

从宏观上说,依赖关系管理分为两个方面。首先,gradle需要知道你要构建或者运行的项目,以便找到它们。我们将这些导入的文件视为项目的依赖。第二,gradle需要构建或者打包你的项目产品。我们将这些导出的文件视为项目的发布。

例如在编译源码时项目需要Hibernate的某些jar包被加入到工程中,而在进行单元测试时还另需要Junit的某些jar被加入。这些被引入的jar包就是项目的依赖。Gradle允许对依赖进行相应的配置,通过不同的配置可以形成不同的依赖效果。例如:

1
2
3
4
5
6
7
8
9
10
apply plugin: 'java'

repositories {
    mavenCentral()
}

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

在项目编译时期,junit的jar包不会被引入,只有在单元测试时才会被引入。这样,就可以在不同的场景下加入相应的依赖关系,非常的灵活

Java 插件中定义了许多标准的配置,例如如下:

1
2
3
4
5
6
7
8
compile 
	用来编译项目源代码的依赖
runtime
	在运行时被生成的类使用的依赖。 默认的, 也包含了compile时的依赖。
testCompile
	编译测试代码的依赖。 默认的, 包含runtime时的依赖和compile时的依赖。
testRuntime
	运行测试所需要的依赖。 默认的, 包含上面三个依赖。

原创不易,欢迎转载,但还请注明出处:blog.waynell.com

你可能感兴趣的:(Gradle的基本使用(三))