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"