为了简化开发人员编写构建文件的工作,Gradle提供了插件机制。
开发 Gradle插件很简单,无非就是在插件中预先定义大量的任务类型、任务、属性等(后文会介绍如何开发自定义插件),接下来开发人员只要在 build.gradle文件中使用如下代码来应用插件即可。
apply plugin : 插件名
应用插件就相当于引入了该插件包含的所有任务类型、任务和属性等,这样 Gradle即可执行插件中预先定义好的任务。
示例——仅在构建文件中加入java插件

此外,java插件还定义了大量属性,比如 sourceCompatibility属性用于指定在编译Java源文件时所使用的JDK版本;archivesBaseName属性用于指定打包成JAR包时的文件名。
在默认情况下,java插件要求将项目源代码和资源都放在src目录下,将构建生成的字节码文件和资源放在 build目录下,该插件会自动管理该目录下的两类源代码和资源。
main和 test目录都可包含java和 resources两个子目录,其中java子目录存放Java源文件;resources子目录存放资源文件。
main和 test目录的内容基本相同,区别只是main目录存放项目的主代码和资源;而test目录存放项目的测试代码和资源。

开发者可以在构建文件中通过sourceSets方法来改变项目主代码、资源的存储路径,也可通过该方法改变测试代码和资源的存储路径。
此外,如果项目需要添加第三方或额外依赖的源代码,则可通过sourceSets方法进行配置。为了配置第三方或额外依赖的源代码路径,需要使用sourceSets方法
//配置被依赖的源代码路径
sourceSets {
fkframework
}

Gradle会自动为每一个新创建的 sourceSet创建相应的 Task,创建规律为
对于名为“fkframework”的 sourceSet,Gradle将为其创建compileFkframeworkJava、processFkframework-Resources和 fkframeworClasses这3个Task,它们的作用分别类似于compileJava、processResources和classes——区别只是前面3个Task 处理 fkframework目录下的Java源代码和资源,而后面3个Task处理main目录下的Java源代码和资源。
对于main而言, Gradle生成的3个任务并不是compileMainJava、 processMainResources和mainClasses,这是由于main是 Gradle默认创建的主sourceSet,因此 main对应的3个任务就不需要“main”名称了。
apply plugin: 'java'
apply plugin: 'application'
// 指定run任务执行的主类
mainClassName = 'dingjiaxiong.HelloWorld'
task showProjectProps {
doLast {
properties.each {
e -> println e
}
}
}
// 配置被依赖的源代码路径
sourceSets {
fkframework
}
// 为run任务的classpath增加fkframework的类
run.classpath = sourceSets.main.runtimeClasspath +
files(sourceSets.fkframework.output.classesDirs)
// 配置compileJava任务依赖compileFkframeworkJava任务
compileJava.dependsOn compileFkframeworkJava
sourceSets {
main {
// 将fkframework生成的字节码文件的存储路径添加到编译时类路径中
compileClasspath = compileClasspath + files(fkframework.output.classesDirs)
}
test {
// 将fkframework生成的字节码文件的存储路径添加到运行时类路径中
runtimeClasspath = runtimeClasspath + files(fkframework.output.classesDirs)
}
}

运行

在构建Java项目时通常都要依赖一个或多个框架,Gradle既可像Maven那样从仓库(远程仓库和本地仓库都行)中下载所依赖的JAR包,也可像Ant那样直接引用项目路径下的JAR包,非常方便。
配置依赖:
使用maven中央仓库
//定义仓库
repositories {
//使用maven默认的中央仓库
mavenCentral()
}
Gradle也允许显式指定maven仓库的URL

Gradle还允许直接使用本地磁盘路径作为Maven仓库

第2步是为了告诉Gradle需要下载哪些JAR包,并为不同的组配置数量不等的JAR包
配置组:
configurations {
//配置名为fkDependency的依赖组
fkDependency
}
为fkDependency依赖组添加jar包
dependencies {
//配置依赖jar包
fkDependency group : 'commons-logging',name : 'commons-logging',version :'1.2'
//简写
fkDependency 'commons-logging:commons-logging:1.2'
}
简写形式使用较多
repositories {
//Maven远程仓库
//显式指定Maven仓库的URL
maven { url "https://maven.aliyun.com/repository/public" }
}
configurations {
//配置名为fkDependency的依赖组
fkDependency
}
dependencies {
fkDependency 'commons-logging:commons-logging:1.2',
"org.apache.commons:commons-dbcp2:2.2.0"
}
task showFkDependency {
doLast {
// 输出fkDependency的依赖的JAR包
println configurations.fkDependency.asPath
}
}
