Gradle 的下載安裝配置以及創建第一個Gradle 項目


 1. 什么是Gradle?

Gradle是一個開源的構建自動化工具,專注於靈活性和性能。 Gradle構建腳本使用Groovy或Kotlin DSL編寫。 閱讀Gradle功能,了解Gradle的功能。

  • 高度可定制 - Gradle以一種可以以最基本的方式定制和擴展的方式建模。
  • 快速 - Gradle通過重用先前執行的輸出,僅處理已更改的輸入以及並行執行任務來快速完成任務。
  • 功能強大 - Gradle是Android的官方構建工具,並支持許多流行的語言和技術。

2. Gradle 的下載和安裝

我們可以安裝Gradle 構建工具在Linux,MacOS ,windows 操作系統上,這個文檔覆蓋了使用包管理器像SDKMAN!,Homebrew,或者Scoop的安裝方法。

使用Gradle Wrapper是升級Gradle的推薦方法

我們可以找到所有的發布版本在發布頁面

1.1 Gradle 必要條件

Gradle 可以運行在大多數的操作系統中,但是需要JDK 或者JRE 8 以上版本

檢查方法,打開操作系統命令行終端,輸入命令

java -version

執行成功如下所示:

注意:

Gradle附帶了自己的Groovy庫,因此不需要安裝Groovy。 Gradle會忽略任何現有的Groovy安裝。

Gradle 會在path環境變量中招JDK 安裝路徑,我們可以設置JAVA_HOME 環境變量指向所需JDK的安裝目錄

1.2 Gradle 安裝

1.2.1 包管理器安裝

SDKMAN! 是一個在大多數基於Unix的系統上管理多個軟件開發工具包的並行版本的工具。

sdk install gradle

Homebrew是“macOS缺失包管理器”

brew install gradle

Scoop是一款受Homebrew啟動的Windows命令行安裝程序。

scoop install gradle

Chocolatey是“Windows的包管理器”。

choco install gradle

MacPorts是一個用於管理macOS上的工具的系統:

 sudo port install gradle

1.2.2 手動安裝

Download  下載最新的發布版本

當前最新版本是5.2.1 ,發布時間是2019年2月8日。發布的壓縮包有兩種。

The current Gradle release is version 5.2.1, released on 08 Feb 2019. The distribution zip file comes in two flavors:

1.3 配置環境變量

1.3.1 Linux or Mac OS

export PATH=$PATH:/opt/gradle/gradle-5.2.1/bin

1.3.2 Windows 

 新建環境變量

GRADLE_HOME

C:\Users\xingyun\apps\gradle\gradle-5.2.1-all\gradle-5.2.1

追加到Path環境變量

%GRADLE_HOME%\bin\

1.4 驗證安裝

 輸入以下命令驗證安裝

gradle -v

驗證成功輸出如下所示:


 1.5 創建新的Gradle構建 

1.5.1 初始化一個項目

1. 打開命令行,在根目錄下輸入以下命令創建一個叫做 basic-demo 文件夾

mkdir basic-demo

 2. 執行成功會顯示如下:

3.進入創建的文件夾輸入以下命令

cd basic-demo

4.執行成功如下所示:

5.輸入gradle初始化命令

gradle init

6. 執行成功如下所示:

7.輸入數字2后按下回車鍵

8.顯示如下所示

9.這里選擇腳本語言,我們選擇groovy,因此輸入1后按下回車鍵

10.執行成功后如下所示:

11.這里需要設置項目名稱,我們保持默認即可,直接回車或者輸入一個項目名稱

12.我們可以看到已經生成成功了

13. 查看當前文件夾列表,輸入命令

ls

14. 執行成功返回結果如下:

目錄結構如下:

├── 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設置腳本

 1.5.2 創建一個task (任務)

Gradle提供API,用於通過基於Groovy或Kotlin的DSL創建和配置任務。 項目包括一組任務,每個任務執行一些基本操作。

Gradle附帶了一個可以在您自己的項目中配置的任務庫。 例如,有一種名為Copy的核心類型,它將文件從一個位置復制到另一個位置。 復制任務非常有用(有關詳細信息,請參閱文檔),但在此,再一次,讓我們保持簡單。 執行以下步驟:

 1. 創建一個src 文件夾

 2.在src目錄中添加名為myfile.txt的文件。 內容是任意的(甚至可以是空的),但為方便起見,添加單行Hello,World! 它。

 3. 在構建文件中定義一個名為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")
}

在這里,group和description可以是您想要的任何內容。 您甚至可以省略它們,但這樣做也會在以后使用的任務報告中省略它們。

這段腳本的功能是將src 文件夾下的所有內容都復制到dest 文件夾下,如果dest 文件夾不存在,則創建它。

4.執行新的copy任務

.\gradlew copy

打開dest 文件夾我們可以看到,src 文件夾下剛才創建的myfile.txt 已經復制進來了。

 1.5.3 使用插件

Gradle包含一系列插件,Gradle插件門戶網站上提供了許多插件。 該發行版附帶的插件之一是base 插件。 結合名為Zip的核心類型,您可以使用配置的名稱和位置創建項目的zip存檔。

使用插件語法將基本插件添加到構建腳本文件中。 請務必在文件頂部添加插件{}塊。
 
Groovy build.gradle
plugins {
    id "base"
}

 Kotlin build.gradle.kts

plugins {
    id("base")
}

現在添加一個從src目錄創建zip存檔的任務。

Groovy build.gradle

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

 Kotlin build.gradle.kts

tasks.create<Zip>("zip") {
    description = "Archives sources in a zip file"
    group = "Archive"

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

基本插件使用設置在 build/distributions 文件夾中創建一個名為basic-demo-1.0.zip的存檔文件。

在這種情況下,只需運行新的zip任務,

.\gradlew zip

執行成功如下會顯示

並查看生成的zip文件是否在您期望的位置

 

 1.5.3 探索並調試您的構建

讓我們看看在我們的新項目中如何處理Gradle。對命令行接口的完整引用也可用。

1.5.3.1 發現可用任務

tasks命令列出了可以調用的漸變任務,包括由基本插件添加的任務,以及剛剛添加的自定義任務。

 .\gradlew tasks

 執行成功會顯示:

 

1.5.4 分析和調試生成

Gradle還提供了一個豐富的基於Web的構建視圖,稱為buildscan

通過使用--scan選項或將構建掃描插件顯式應用到項目中,您可以在link:scans.gradle.com免費創建一個構建掃描。將生成掃描發布到scans.gradle.com將此數據傳輸到gradle的服務器。要將數據保存在自己的服務器上,請查看Gradle Enterprise。

嘗試通過在執行任務時添加--scan來創建生成掃描。

 .\gradlew zip --scan

 執行成功后如下所示:

打開網址:https://gradle.com/s/niiuxn3t6mogs

首次打開會有一個頁面提示輸入郵箱,輸入后

郵箱可以看到如下所示:

 

 點擊Discover your build 后可以看到這樣的管理界面

如果你瀏覽一下你的構建掃描,你應該能夠很容易地發現在哪里執行了什么任務,花了多長時間,應用了哪些插件,等等。考慮下一次在StackOverflow上調試某些內容時共享生成掃描。

1.5.5 發現可用屬性

“屬性”命令告訴您有關項目屬性的信息。

 .\gradlew properties

 輸出結果如下

詳細內容可看:

> Task :properties

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

allprojects: [root project 'basic-demo']
ant: org.gradle.api.internal.project.DefaultAntBuilder@28d77beb
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@7e7a6637
application: C++ application 'main'
archivesBaseName: basic-demo
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@6ac031ac
asDynamicObject: DynamicObject for root project 'basic-demo'
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@417a100d
buildDir: C:\Users\xingyun\Downloads\basic-demo\build
buildFile: C:\Users\xingyun\Downloads\basic-demo\build.gradle
buildPath: :
buildScriptSource: org.gradle.groovy.scripts.TextResourceScriptSource@526133ea
buildTypes: BuildType container
buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@7f87ac4f
childProjects: {}
class: class org.gradle.api.internal.project.DefaultProject_Decorated
classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@1421af42
components: SoftwareComponentInternal set
configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@54a2fb3
configurationTargetIdentifier: org.gradle.configuration.ConfigurationTargetIdentifier$1@5eefa293
configurations: configuration container
convention: org.gradle.api.internal.plugins.DefaultConvention@1cc888d5
copy: task ':copy'
defaultArtifacts: org.gradle.api.internal.plugins.DefaultArtifactPublicationSet_Decorated@58a6fb1
defaultTasks: []
deferredProjectConfiguration: org.gradle.api.internal.project.DeferredProjectConfiguration@5169ef04
dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@72313480
dependencyLocking: org.gradle.internal.locking.DefaultDependencyLockingHandler_Decorated@2ae79433
depth: 0
description: null
displayName: root project 'basic-demo'
distsDir: C:\Users\xingyun\Downloads\basic-demo\build\distributions
distsDirName: distributions
ext: org.gradle.internal.extensibility.DefaultExtraPropertiesExtension@7c468139
extensions: org.gradle.api.internal.plugins.DefaultConvention@1cc888d5
fileOperations: org.gradle.api.internal.file.DefaultFileOperations@62c9507a
fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@19a7ed97
flavors: Flavor container
gradle: build 'basic-demo'
group:
identityPath: :
inheritedScope: org.gradle.internal.extensibility.ExtensibleDynamicObject$InheritedDynamicObject@ff7a49c
layout: org.gradle.api.internal.file.DefaultProjectLayout@47f0a312
libsDir: C:\Users\xingyun\Downloads\basic-demo\build\libs
libsDirName: libs
listenerBuildOperationDecorator: org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator@6f126116
logger: org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger@49ffe236
logging: org.gradle.internal.logging.services.DefaultLoggingManager@7b9e6cd1
machines: org.gradle.nativeplatform.internal.DefaultTargetMachineFactory@39b4b883
modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@45d26472
modelSchemaStore: org.gradle.model.internal.manage.schema.extract.DefaultModelSchemaStore@730ac0ac
module: org.gradle.api.internal.artifacts.ProjectBackedModule@5d3640ea
mutationState: project :
name: basic-demo
normalization: org.gradle.normalization.internal.DefaultInputNormalizationHandler_Decorated@7b7ac2f8
objects: org.gradle.api.internal.model.DefaultObjectFactory@67161db4
parent: null
parentIdentifier: null
path: :
platforms: Platform container
pluginManager: org.gradle.api.internal.plugins.DefaultPluginManager_Decorated@31b114d0
plugins: [org.gradle.buildinit.plugins.BuildInitPlugin@141bbdea, org.gradle.buildinit.plugins.WrapperPlugin@39dbc093, org.gradle.api.plugins.HelpTasksPlugin@6ef781a1, org.gradle.language.base.plugins.LifecycleBasePlugin@57591f3b, org.gradle.language.plugins.NativeBasePlugin@1ee40cd7, org.gradle.platform.base.plugins.ComponentBasePlugin@79dc88c0, org.gradle.language.base.plugins.LanguageBasePlugin@2b74e4d3, org.gradle.platform.base.plugins.BinaryBasePlugin@344b9641, org.gradle.language.base.plugins.ComponentModelBasePlugin@af7a6ab, org.gradle.nativeplatform.plugins.NativeComponentModelPlugin@1770b5bd, org.gradle.nativeplatform.plugins.NativeComponentPlugin@1b2e99fc, org.gradle.nativeplatform.toolchain.plugins.MicrosoftVisualCppCompilerPlugin@73bffd46, org.gradle.nativeplatform.toolchain.plugins.GccCompilerPlugin@44cacf64, org.gradle.nativeplatform.toolchain.plugins.ClangCompilerPlugin@5685571d, org.gradle.nativeplatform.toolchain.internal.plugins.StandardToolChainsPlugin@390bc548, org.gradle.language.cpp.plugins.CppBasePlugin@35d25ae2, org.gradle.language.cpp.plugins.CppApplicationPlugin@27f112d3, org.gradle.api.plugins.ReportingBasePlugin@5bb0948f, org.gradle.testing.base.plugins.TestingBasePlugin@3cf63b34, org.gradle.nativeplatform.test.plugins.NativeTestingBasePlugin@1bd47302, org.gradle.nativeplatform.test.cpp.plugins.CppUnitTestPlugin@341c9d21, org.gradle.api.plugins.BasePlugin@6bd773c1]
processOperations: org.gradle.api.internal.file.DefaultFileOperations@62c9507a
project: root project 'basic-demo'
projectConfigurator: org.gradle.api.internal.project.BuildOperationCrossProjectConfigurator@6675ca14
projectDir: C:\Users\xingyun\Downloads\basic-demo
projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@5e81f9bb
projectPath: :
projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@e2492df
properties: {...}
providers: org.gradle.api.internal.provider.DefaultProviderFactory@5ebda1a1
publicType: org.gradle.api.plugins.BasePluginConvention
reporting: org.gradle.api.reporting.ReportingExtension_Decorated@16d0f508
repositories: repository container
resourceLoader: org.gradle.internal.resource.transfer.DefaultUriTextResourceLoader@47cd8a48
resources: org.gradle.api.internal.resources.DefaultResourceHandler@6d554a04
rootDir: C:\Users\xingyun\Downloads\basic-demo
rootProject: root project 'basic-demo'
script: false
scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@5ed64ea6
scriptPluginFactory: org.gradle.configuration.ScriptPluginFactorySelector@4fbf98c1
serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$4@648bd4b4
services: ProjectScopeServices
standardOutputCapture: org.gradle.internal.logging.services.DefaultLoggingManager@7b9e6cd1
state: project state 'EXECUTED'
status: integration
subprojects: []
tasks: task set
toolChains: NativeToolChain container
unitTest: C++ test suite 'test'
version: unspecified
zip: task ':zip'

BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
PS C:\Users\xingyun\downloads\basic-demo>
View Code

默認情況下,項目名稱與文件夾名稱匹配。您還可以指定group和version屬性,但目前它們采用的是默認值,如描述所示。

buildFile 屬性是生成腳本的完全限定路徑名,默認情況下,它位於projectdir-中。

您可以更改許多屬性。例如,您可以嘗試將以下行添加到構建腳本文件中,然后重新執行 .\gradlew properties

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM