Gradle是一個開源的構建自動化工具,專一於靈活性和性能。 Gradle構建腳本使用Groovy或Kotlin DSL編寫。 閱讀Gradle功能,瞭解Gradle的功能。java
- 高度可定製 - Gradle以一種能夠以最基本的方式定製和擴展的方式建模。
- 快速 - Gradle經過重用先前執行的輸出,僅處理已更改的輸入以及並行執行任務來快速完成任務。
- 功能強大 - Gradle是Android的官方構建工具,並支持許多流行的語言和技術。
咱們能夠安裝Gradle 構建工具在Linux,MacOS ,windows 操做系統上,這個文檔覆蓋了使用包管理器像SDKMAN!,Homebrew,或者Scoop的安裝方法。windows
使用Gradle Wrapper是升級Gradle的推薦方法api
咱們能夠找到全部的發佈版本在發佈頁面服務器
Gradle 能夠運行在大多數的操做系統中,可是須要JDK 或者JRE 8 以上版本app
檢查方法,打開操做系統命令行終端,輸入命令ide
java -version
執行成功以下所示:工具
注意:oop
Gradle附帶了本身的Groovy庫,所以不須要安裝Groovy。 Gradle會忽略任何現有的Groovy安裝。性能
Gradle 會在path環境變量中招JDK 安裝路徑,咱們能夠設置JAVA_HOME 環境變量指向所需JDK的安裝目錄開發工具
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
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:
export PATH=$PATH:/opt/gradle/gradle-5.2.1/bin
新建環境變量
GRADLE_HOME C:\Users\xingyun\apps\gradle\gradle-5.2.1-all\gradle-5.2.1
追加到Path環境變量
%GRADLE_HOME%\bin\
輸入如下命令驗證安裝
gradle -v
驗證成功輸出以下所示:
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可執行JARgradle-wrapper.properties
Gradle Wrapper配置屬性gradlew
基於Unix的系統的Gradle Wrapper腳本gradlew.bat
適用於Windows的Gradle Wrapper腳本settings.gradle
用於配置Gradle構建的Gradle設置腳本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 已經複製進來了。
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文件是否在您指望的位置
讓咱們看看在咱們的新項目中如何處理Gradle。對命令行接口的完整引用也可用。
tasks命令列出了能夠調用的漸變任務,包括由基本插件添加的任務,以及剛剛添加的自定義任務。
.\gradlew tasks
執行成功會顯示:
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上調試某些內容時共享生成掃描。
「屬性」命令告訴您有關項目屬性的信息。
.\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>
默認狀況下,項目名稱與文件夾名稱匹配。您還能夠指定group和version屬性,但目前它們採用的是默認值,如描述所示。
buildFile 屬性是生成腳本的徹底限定路徑名,默認狀況下,它位於projectdir-中。
您能夠更改許多屬性。例如,您能夠嘗試將如下行添加到構建腳本文件中,而後從新執行 .\gradlew properties
description = "A trivial Gradle build" version = "1.0"