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

 1. 什麼是Gradle?

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

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

2. Gradle 的下載和安裝

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

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

咱們能夠找到全部的發佈版本在發佈頁面服務器

1.1 Gradle 必要條件

Gradle 能夠運行在大多數的操做系統中,可是須要JDK 或者JRE 8 以上版本app

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

java -version

執行成功以下所示:工具

注意:oop

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"
相關文章
相關標籤/搜索