Gradle入门

Gradle是一款应用构建工具,基于Groovy语言构建的DSL。

DSL详细说明参见领域特定语言

简介

Gradle两个基本对象:

projects(项目)和tasks(任务)。

Gradle projects

可以是一个jar文件,或是部署到生产环境中的应用程序,一项目包含一或多个task。

Gradle task

task代表gradle构建时执行的最小工作单元。

通常,每个Gradle build都会包含一或多个项目。

配置文件

build.gradle

Gradle构建脚本,指定项目及其任务。

每个Gradle项目都有一个build.gradle文件。

gradle命令会在当前路径中查找build.gradle。

此文件中,自定义要运行的任务,项目依赖项等等。

gradle.properties

Gradle属性文件,用于配置构建的属性。

虽然,可通过GRADLE_OPTS、JAVA_OPTS配置环境,但通过gradle.properties对项目进行版本化,整个团队使用一致的环境,这种方式会更方便简单。

settings.gradle

Gradle配置文件,若一个构建只有一个项目,此文件是可选的。

如果Gradle构建多个项目,此文件是必需的,因为,它描述了哪些项目参与构建。

在多项目构建中,必须在项目层级结构的根项目中包含此配置文件。

构建脚本文件

创建一个build.gradle文件并在其中定义一个任务:

task hello { 
    println "hello,Gradle!"
}

说明:

task hello,

使用task关键字定义了一个名为hello的任务。

每个任务都必须命名,以便Gradle调用它。

println "Hello, Baeldung"

代码块,也可以使用其他语言,如:Groovy、Kotlin。

如果要检查Gradle提供的任务,运行:

gradle tasks

Gradle build和依赖管理

构建项目需要一组配置和任务,用于告诉Gradle在哪里找到源代码进行编译、测试,及如何在项目中添加依赖项等等。

对于一些常规的任务,可借助Gradle插件完成。

Java Plugin

Java Plugin预定义的配置项和任务,能帮助轻松构建Java项目。

使用类似Maven的source sets来查找源代码。

Source-set告诉插件在哪里可以找到源代码。

默认,Java源代码位于:src/main/java。

因此,在build.gradle文件通过一个简单的apply plugin指令,将java插件应用到项目中:

apply plugin: 'java'

构建java项目:

gradle build

依赖关系管理

Gradle提供了一些定义依赖项的方法。

在定义之前,首先,要告诉Gradle从何处获取依赖项。

为此,需要配置仓库,可使用maven中央仓库:

repositories{ 
    mavenCentral() 
} 

告诉Gradle所需的外部依赖,假设项目需要一个外部依赖,如:Spring框架。

可在依赖块中声明它,如下所示:

dependencies{ 
    compile 'org.springframework:spring-context:4.3.5.RELEASE'
} 

声明外部依赖格式

GAV格式(标准Maven格式):

group:artifactId:version

也可使用以下格式:

dependencies{ 
    compile group:'org.springframework', name:'spring-context', version:'4.3.5.RELEASE'
}

发布Artifacts

使用依赖关系配置将文件发布到仓库。

这些文件称为Artifacts,

在将Artifacts发布到某个仓库之前,首先,需要根据GAV格式定义一些信息。

group='com.xieyonghui.cs'
version='1.0.0'

发布到仓库

发布Artifacts需要做两件事。

首先,使用Maven插件。

其次,配置仓库位置。

build.gradle文件配置:

group='com.xieyonghui.cs' 
version='1.0.0' 

apply plugin: 'java' 

apply plugin: 'maven' 

uploadArchives { 
    repositories { 
        mavenDeployer { 
            repository(url: 'http://yourmavenrepo/repository') {   
                authentication(userName: 'user', password: 'password'); } 
        } 
    } 
}

UploadArchives中定义仓库地址及认证信息。

配置完成后运行如下命令:

gradle upload