Gradle - 创建 Gradle 构建

本文地址:Gradle - 创建 Gradle 构建

根据此教程,你可以创建一个小型 Gradle 项目,这里面会涉及一些基础的 Gradle 命令,你可以对 Gradle 是如何管理项目的有个深刻的理解。

你需要准备

  • 大约 11 分钟的时间
  • 一个终端工具(Terminal)
  • 一个 Java 运行时环境(JRE)或者 Java 开发工具(JDK),Java 版本需要在 1.8 以上。
  • 一个 Gradle 发布版本,版本最好在 4.10.3 及以上。

初始化一个项目

> mkdir basic-demo
> cd basic-demo

现在就可以使用 Gradle 的 init 命令生成一个简单的项目了。我们将探索生成的所有东西,以便于你能知道发生了什么。

> gradle init
Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed

运行完这个命令后应该会显示“BUILD SUCCESSFUL”,并且会生成以下 “空” 项目。如果没有执行成功,请检查一下 Gradle 是否正确安装了,并且你要确保你配置了正确的 JAVA_HOME环境。

Gradle 生成了如下内容:

Groovy

├── build.gradle  
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar  
│       └── gradle-wrapper.properties  
├── gradlew  
├── gradlew.bat  
└── settings.gradle  
  • build.gradle 用于配置当前项目的 Gradle 构建脚本。
  • gradle-wrapper.jar 是 Gradle Wrapper 的可执行 JAR。
  • gradle-wrapper.properties 是 Gradle Wrapper 的配置内容。
  • gradlew是类 Unix 系统的 Gradle Wrapper 脚本。
  • gradlew.bat是 Windows 的Gradle Wrapper 脚本。
  • settings.gradle 是 Gradle 用于配置 Gradle 构建的设置脚本。

好啦!就这样,我们完成了基本的指导,但是你可能还想知道如何在项目中使用 Gradle。我们继续。

创建一个任务

Gradle 使用基于 Groovy 或者 Kotlin 的语言,给我们提供了一系列的 API,用于创建和配置任务。一个 Project 包含一系列的Tasks,每个 task 都会执行一些基本的操作。

Gradle 附带了一个可以在您自己的项目中配置的任务库。例如,有一个核心的 type 叫做 Copy,它会从一个地方复制文件到另一个地方。
Copy task 非常有用(可以参考 see the documentation 获取详情),但是在这里,我们简化一下,执行以下步骤:

  1. 创建一个文件夹 src
  2. src 文件夹下增加一个文件 myfile.txt 。文件内容你可以随便写(也可以是空的),但是为了方便我们增加一行 Hello, World! 在里面。
  3. 在 build 文件中定义一个 Copy (注意大小写)类型的任务copy,复制 src 文件夹到一个新的文件夹 dest 中。(我们不需要手动创建 dest 文件夹,task 会自动帮我们创建。)

build.gradle

task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory"){
    from "src"
    into "dest"
}

其中,groupdescription你可以随便写。你也可以省略,但是省略后在后面的repost task 中这些内容也会省略。

现在执行一下 copy task。

❯ ./gradlew copy
> Task :copy

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

检查一下,在 dest 目录中生成了一个新的myfile.txt文件,它的内容和我们在 src 目录中的文件的内容是一样的。

应用插件 plugin

Gradle 提供了一系列的插件,有许多插件在 the Gradle plugin portal 中可以找到。该发行版附带的其中一个插件是 base 插件。结合名为 Zip 的一个核心 type,你可以使创建一个 zip 压缩档,并且可以指定名字和位置。

使用plugins语法增加 base 插件到你的 build 脚本文件中。请确保在文件的最上面增加plugins{}块。

build.gradle

plugins {
    id "base"
}

... rest of the build file ...

然后可以增加一个任务对 src 目录创建一个 zip 压缩档。

build.gradle

task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file"){
    from "src"
    setArchiveName "basic-demo-1.0.zip"
}

base 插件和 settings 一起工作可以在 build/distributions 文件夹下创建一个名为 “basic-demo-1.0.zip” 的压缩文件。

然后,运行新的 zip task,可以看到我们期望的 zip 压缩文件已经生成了。

❯ ./gradlew zip
> Task :zip

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

继续探索并调试你的 build

我们还能使用 Gradle 在我们的新项目中做什么呢?这儿有一份完整的列表可以查看: reference to the command-line interface

发现可用的 tasks

tasks 命令会列出你可以调用的 Gradle tasks,其中包含 base 插件中的,和你自己增加定制的。

❯ ./gradlew tasks

分析调试你的 build

Gradle 还提供了一个基于 Web 的丰富的构建视图,称为构建扫描(build scan)。

使用 --scan 参数或者在项目中显式应用 scan 插件,就可以免费在 scans.gradle.com 上创建构建扫描。将构建扫描发布到 scans.gradle.com 上会将此数据传输到 Gradle 服务器。想要将你的数据放在你自己的服务器上,请查看 Gradle Enterprise

当执行 task 的时候可以尝试使用 --scan 参数创建一个 build scan。

❯ ./gradlew zip --scan

BUILD SUCCESSFUL in 0s
1 actionable task: 1 up-to-date

Publishing a build scan to scans.gradle.com requires accepting the Terms of Service defined at https://scans.gradle.com/terms-of-service. Do you accept these terms? [yes, no]
Gradle Cloud Services license agreement accepted.

Publishing build scan...
https://gradle.com/s/repnge6srr5qs

发现可用的配置

properties 命令会展示关于你的项目的属性。

❯ ./gradlew properties

输出会比较多,这里我们列出一小部分可用的配置。

> Task :properties

------------------------------------------------------------
Root project
------------------------------------------------------------

buildDir: /Users/.../basic-demo/build
buildFile: /Users/.../basic-demo/build.gradle
description: null
group:
name: basic-demo
projectDir: /Users/.../basic-demo
version: unspecified

BUILD SUCCESSFUL

项目的 name 默认适合目录名相同的。你也可以指定 groupversion 属性,但是现在我们使用的是它们的默认值。

buildFile 属性是 build 脚本的全路径,它默认使用的是项目目录。

我们可以改变许多属性。例如,我们可以增加以下内容到 build 脚本文件中,重新执行 gradle properties

description = "A trivial Gradle build"
version = "1.0"

下一步

恭喜!我们已经创建了一个新的 Gradle build,并且学习了如何检查 Gradle build。

如果碰巧你也想要在特定的平台上创建一个 library 或者 application,你可以参照下面的指导。

  • Building Android Apps

  • Building Java Libraries

  • Building Kotlin JVM Libraries

  • Building C++ Executables

  • Building Groovy Libraries

  • Building Scala Libraries

你还可以在 sample Gradle builds on GitHub 查看更多构建示例。

声明:本文为官方文档的翻译。Creating New Gradle Builds

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容