• 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:Usersxingyunappsgradlegradle-5.2.1-allgradle-5.2.1

    追加到Path环境变量

    %GRADLE_HOME%in

    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:UsersxingyunDownloadsasic-demouild
    buildFile: C:UsersxingyunDownloadsasic-demouild.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:UsersxingyunDownloadsasic-demouilddistributions
    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:UsersxingyunDownloadsasic-demouildlibs
    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:UsersxingyunDownloadsasic-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:UsersxingyunDownloadsasic-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:Usersxingyundownloadsasic-demo>
    View Code

    默认情况下,项目名称与文件夹名称匹配。您还可以指定group和version属性,但目前它们采用的是默认值,如描述所示。

    buildFile 属性是生成脚本的完全限定路径名,默认情况下,它位于projectdir-中。

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

    description = "A trivial Gradle build"
    version = "1.0"
  • 相关阅读:
    C#中 File,Directory,FileInfo,DirectoryInfo区别与应用
    C#中设置开机自动运行和关机
    C# 线程手册 第三章 使用线程 小心死锁
    C# WinForm判断Win7下是否是管理员身份运行
    C#应用MemoryStream提高File读取速度
    CodeforcesDouble Profiles
    SRM533 D1 L1
    SRM532 D1 L2
    SRM533 D2 L3
    次小生成树 | 割点 | 割边
  • 原文地址:https://www.cnblogs.com/xingyunblog/p/10428178.html
Copyright © 2020-2023  润新知