遵循本指南,您将创建一个简单的Gradle项目,调用一些基本的Gradle命令,并了解Gradle如何管理该项目.

What you’ll need

  • About NN

  • 终端应用

  • Java Runtime Environment(JRE)或Java Development Kit(JDK),版本1.8或更高版本(仅对于运行Gradle必要)

  • Gradle版本4.10.3或更高版本

显示了针对基于Unix的系统的Shell命令. Windows每个都有类似的命令.

Initialize a project

首先,让我们在项目所在的位置创建一个新目录.

❯ mkdir basic-demo
❯ cd basic-demo

现在,我们可以使用Gradle的init命令生成一个简单的项目. 我们将探索生成的所有内容,以便您确切了解正在发生的事情.

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

BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed
1 If you want to use the Kotlin DSL use gradle init --dsl kotlin. See the documentation for details.

该命令应显示" BUILD SUCCESSFUL"并生成以下"空"项目. 如果没有,请确保正确安装了Gradle,并且正确设置了JAVA_HOME环境变量.

这就是Gradle为您生成的.

Groovy
├── build.gradle  (1)
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar  (2)
│       └── gradle-wrapper.properties  (3)
├── gradlew  (4)
├── gradlew.bat  (5)
└── settings.gradle  (6)
Kotlin
├── build.gradle.kts  (1)
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar  (2)
│       └── gradle-wrapper.properties  (3)
├── gradlew  (4)
├── gradlew.bat  (5)
└── settings.gradle.kts  (6)
1 用于配置当前项目的Gradle构建脚本
2 Gradle Wrapper可执行JAR
3 Gradle Wrapper配置属性
4 基于Unix的系统的Gradle Wrapper脚本
5 适用于Windows的Gradle Wrapper脚本
6 用于配置Gradle构建的Gradle设置脚本
gradle init可以生成各种不同类型的项目 ,甚至知道如何将简单的pom.xml文件转换为Gradle.

繁荣! 烤. 我们可以在这里结束指南,但是您可能想知道如何在该项目中使用 Gradle. 来做吧.

Create a task

Gradle提供了用于通过Groovy或基于Kotlin的DSL创建和配置任务的API. Project包括Task的集合,每个Task都执行一些基本操作.

Gradle带有一个任务库,您可以在自己的项目中对其进行配置. 例如,有一个名为Copy的核心类型,它将文件从一个位置复制到另一个位置. Copy任务非常有用(有关详细信息, 请参见文档 ),但是这里还是让我们保持简单. 执行以下步骤:

  1. 创建一个名为src的目录.

  2. src目录中添加一个名为myfile.txt的文件. 内容是任意的(甚至可以为空),但为方便起见,请添加单行Hello, World! 对此.

  3. 在你build.gradle文件中,定义了一个名为任务copy类型的Copy在生成文件拷贝(注意是大写字母) src目录到一个新的目录名为dest . (您不必创建dest目录,该任务将为您完成.)

build.gradle
task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
    from "src"
    into "dest"
}
build.gradle.kts
tasks.create<Copy>("copy") {
    description = "Copies sources to the dest directory"
    group = "Custom"

    from("src")
    into("dest")
}

在这里, groupdescription可以是您想要的任何东西. 您甚至可以忽略它们,但是这样做也会从稍后使用的tasks报告中忽略它们.

现在执行新的copy任务:

❯ ./gradlew copy
> Task :copy

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

通过检查dest目录中现在是否存在一个名为myfile.txt的文件,并且其内容与src目录中相同文件的内容相匹配,来验证它是否按预期工作.

Apply a plugin

Gradle包括一系列插件,并且在Gradle插件门户上可以找到许多很多插件 . 发行版随附的插件之一是base插件. 与名为Zip的核心类型结合使用,您可以使用配置的名称和位置创建项目的zip存档.

使用plugins语法将base插件添加到您的构建脚本文件中. 确保在文件顶部添加plugins {}块.

build.gradle
plugins {
    id "base"
}

... rest of the build file ...
build.gradle.kts
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"
    archiveFileName = "basic-demo-1.0.zip"
}
build.gradle.kts
tasks.create<Zip>("zip") {
    description = "Archives sources in a zip file"
    group = "Archive"

    from("src")
    archiveFileName.set("basic-demo-1.0.zip")
}

base插件与设置一起使用,可在build/distributions文件夹中创建一个名为basic-demo-1.0.zip的存档文件.

在这种情况下,只需运行新的zip任务,然后查看生成的zip文件是否在您期望的位置.

❯ ./gradlew zip
> Task :zip

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

Explore and debug your build

让我们看看在我们的新项目中,Gradle还可以做什么. 还提供了对命令行界面的完整参考 .

Discover available tasks

tasks命令列出了您可以调用的Gradle任务,包括由base插件添加的任务,以及刚刚添加的自定义任务.

❯ ./gradlew tasks

> Task :tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Archive tasks
-------------
zip - Archives sources in a zip file

Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
clean - Deletes the build directory.

Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.

Custom tasks
------------
copy - Simply copies sources to a the build directory

Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'basic-demo'.
components - Displays the components produced by root project 'basic-demo'. [incubating]
dependencies - Displays all dependencies declared in root project 'basic-demo'.
dependencyInsight - Displays the insight into a specific dependency in root project 'basic-demo'.
dependentComponents - Displays the dependent components of components in root project 'basic-demo'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'basic-demo'. [incubating]
projects - Displays the sub-projects of root project 'basic-demo'.
properties - Displays the properties of root project 'basic-demo'.
tasks - Displays the tasks runnable from root project 'basic-demo'.

Verification tasks
------------------
check - Runs all checks.

Rules
-----
Pattern: clean<TaskName>: Cleans the output files of a task.
Pattern: build<ConfigurationName>: Assembles the artifacts of a configuration.
Pattern: upload<ConfigurationName>: Assembles and uploads the artifacts belonging to a configuration.

To see all tasks and more detail, run gradlew tasks --all

To see more detail about a task, run gradlew help --task <task>

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

Analyze and debug your build

Gradle还提供了构建的基于Web的丰富视图,称为构建扫描 .

basic demo build scan

通过使用--scan选项或将构建扫描插件显式应用于您的项目,您可以在scans.gradle.com免费创建构建扫描. 将构建扫描发布到scans.gradle.com会将这些数据传输到Gradle的服务器. 要将数据保存在自己的服务器上,请查看Gradle Enterprise .

尝试通过在执行任务时添加--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

如果浏览构建扫描,则应该能够轻松找出执行了哪些任务,花费了多长时间,应用了哪些插件等等. 下次在StackOverflow上调试某些内容时,请考虑共享构建扫描.

在《 构建扫描插件用户手册》中了解有关如何配置和使用构建扫描的更多信息.

Discover available properties

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
> Task :properties

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

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

BUILD SUCCESSFUL

name的项目相匹配的默认文件夹的名称. 您还可以指定groupversion属性,但目前它们采用其默认值,如description .

buildFile属性是构建脚本的标准路径名,默认情况下,该路径名位于projectDir .

您可以更改许多属性. 例如,您可以尝试gradle properties添加到构建脚本文件中,然后重新执行gradle properties .

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

Next Steps

恭喜你! 您已经创建了新的Gradle构建并学习了如何检查Gradle构建!

您可能想为特定平台创建库或应用程序,因此以下是一些指南,这些指南将教您有关在所选平台上创建构建的更多信息:

Help improve this guide

有意见或问题吗? 找到错字了? 像所有Gradle指南一样,帮助只是GitHub问题而已. 请在gradle / guides中 添加问题或请求请求,我们会尽快回复您.