• Gradle入门详解 艾尔夏尔


    简述

      Gradle是一种自动化构建工具,在同领域的产品有Ant和Maven。Gradle可以用Groovy或Kotlin编写的DSL来帮助我们构建。

    构建

      构建就是把代码文件转化为可在计算机独立运行的软件制品的过程,以java为例,构建分为:编译和打包的操作

      如果人工进行构建的话需要用到javac、jar等命令,且构建过程比较繁琐,也容易出错,这时就需要自动化构建工具帮我们进行自动构建

    Demo

      下面将演示用gradle来从零开始构建项目,我们创建好项目之后可以在命令行中使用 gradle init 命令来初始化项目,然后可以进行相应的选项

     

      选择哪种语言来编写DSL,一般选Groovy

     

      选择哪种测试框架,这里选JUnit5也就是4选项

     

       填写好项目名和包名后,gradle就完成了项目的初始化生成

      使用 gradle build 命令即可完成一次项目构建

    Gradle Wrapper

      我们来考虑下面两个问题:

        1.如何保证大家本地安装的Gradle版本的一致性?

        2.服务器端构建,分配到的服务器没有安装Gradle,如何进行构建?

      Gradle Wrapper则是用来解决上面两个问题的方案——把gradle装进盒子里,这个盒子就是wrapper

      当你需要某个版本的gradle的时候,gradle wrapper就会去gradle的官方服务器下载对应版本

      

      在项目的gradle-wrapper.properties配置文件我们可以看到,gradle的远程下载地址,以及本地的存放地址(前两行的地址拼接)

      这样通过配置文件配置gradle就解决了上面两个问题,我们把这个配置文件push到仓库,同事拉去下来也就制定好了gradle的版本,同时如果机子没有gradle的话会自动去下载

    Task

      在gradle中task就是一系列的操作任务,例如我们有如下五种常见的task

    clean 清理构建产物(./gradlew clean)
    build 执行构建(./gradlew build)
    test 运行测试(./gradlew test)
    tasks 查看所有tasks(./gradlew tasks)
    help 查看帮助信息(./gradlew help --task build)

      task的执行也是有依赖的,即一个大的task会有几个小的task构成

      

      使用./gradlew xxx --dry-run命令即可查看名字为xxx的task命令的构成

      如果./gradlew build -x test

    依赖管理

      在build.gradle文件里我们可以进行项目的依赖管理,我们只需往dependencies里添加我们需要的类库的坐标即可

      需要注意的是坐标前的关键字不同会产生不同的效果

    api 能访问依赖库所依赖的库的方法
    implementation 依赖的库只能自己库本身访问,举个例子,A依赖B,B依赖C,如果B依赖C是使用的implementation依赖,那么在A中是访问不到C中的方法的
    compileOnly 只在编译的时候有效, 不参与打包
    runtimeOnly 只在打包的时候有效,编译不参与
    testImplementation 在单元测试和打包测试apk的时候有效

    版本冲突问题

      如果你依赖了库A的1.0版本,又依赖了库B,这个库B依赖了库A的2.0版本,此时就发生了版本冲突问题

      1.我们可以手动去除冲突的依赖,在冲突的库选一个进行exclue

    implementation ('com.carlos.test:Test:1.0.0') {
        exclude group: "io.reactivex.rxjava2",module: "rxjava"
        // exclude group: "io.reactivex.rxjava2:rxjava:2.1.11"
    }
    implementation 'io.reactivex.rxjava2:rxjava:2.1.13'

      2.我们可以强制使用某版本依赖

    configurations.all {
        resolutionStrategy {
            force 'io.reactivex.rxjava2:rxjava:2.1.13'
        }
    }
  • 相关阅读:
    [HPM] Error occurred while trying to proxy request xx from yy to http://zzsvc:8080 (ENOTFOUND)
    rsyslogd的内存过高问题
    父子线程间变量传递问题
    C++探究Undefined reference to static constexpr
    windows安装MySQL8.0
    Chrome 换肤 更改所有网站为暗色主题
    Jest 异步测试 Promise Async Await
    Vite 处理静态文件
    Github Actions 如何持续部署发布到npm
    Vite 如何配置支持Typescript
  • 原文地址:https://www.cnblogs.com/CNLayton/p/15927659.html
Copyright © 2020-2023  润新知