Gradle的设计理念是,所有有用的特性都由Gradle插件提供,例如编写一个Java项目时,需要使用到 Java 插件, 它会将许多任务自动的加入到你项目里。Gradle本身提供了一系列的标准插件,无需多余配置只需要在你的build.gradle文件中加入 apply plugin: 'java'
这样就可以引入许多task,只需要使用相应的task命令就可以进行项目构建。例如下列一些task:
从上图可以看出,我们通常在执行一个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