日更挑战-Gradle简单认识

2021-06-08  本文已影响0人  愿你我皆是黑马

越不懂的越爱装
大家都同等:IT世界没有难不难,只有是否了解过

挑战目录

什么是gradle

是基于Groovy(运行在JVM上的一种语言)的项目构建工具(你说我们写一个jar包来进行项目构建是不是一样的)


gradle脚本执行的过程


脚本构成


build.gradle在gradle中充当的角色

Gradle默认执行当前目录下的build.gradle文件,代表名字为build的Project


gradle基本语法


Type

从安卓项目中可以看到类似下面的任务

task clean(type: Delete) {
    //在配置阶段这个就会执行,不管这个任务有没有被运行
    delete rootProject.buildDir //省略括号的方法调用
}

跟踪可以看到如下:

/**
* @return The build directory. Never returns null.
*/
File getBuildDir(); //build文件夹

跟踪delete可以看到如下:

//将build文件夹放到Set<Object> delete中
public Delete delete(Object... targets) { //targets传进来长度为1的 build文件夹目录
    for (Object target : targets) {
       this.delete.add(target);  // private Set<Object> delete = new LinkedHashSet<Object>();
    }
    return this;
}

上面执行完成后就在配置阶段将build目录添加到delete里面了。

在public class Delete extends ConventionTask implements DeleteSpec里面可以找到如下方法,真正删除build文件夹

@TaskAction //标识在执行这个任务的时候执行该方法
protected void clean() {
    Deleter deleter = new Deleter(getFileResolver(), getFileSystem());
    final boolean innerFollowSymLinks = followSymlinks;
    final Object[] paths = delete.toArray();
    setDidWork(deleter.delete(new Action<DeleteSpec>(){
        @Override
        public void execute(DeleteSpec deleteSpec) {
            deleteSpec.delete(paths).setFollowSymlinks(innerFollowSymLinks);
        }
    }).getDidWork());
}

综上我们可以看出来type: Delete就相当于继承java代码写的Delete任务,继承后我们可以使用相应的方法属性
其他的预定义type :
Copy 、Sync、Zip
上面的可以参照文章预定义type


应用插件

自定义gralde插件(暂时没写以后在写)


安卓中build.gradle的特定元素

 buildscript*:

  1. 指定项目依赖的仓库地址(repositories)
  2. 配置使用的插件地址(dependencies)
buildscript {
    repositories { //下面是配置仓库中心的多种形式
        maven {
            credentials {
                username NEXUS_USERNAMEy
                password NEXUS_PASSWORDy
            }
            url MAVEN_REPO_RELEASE_URLy
        }
        flatDir{
            dirs '../../base/libs'
        }
        maven { url 'https://dl.bintray.com/umsdk/release' }
        google()
        jcenter()
    }
    dependencies { //配置项目使用插件地址,里面存在很多预定于插件和预定义规则
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath "com.alibaba:arouter-register:1.0.2"
        //gradle 3.2.1 -> 对应doraemonkit-plugin:3.1.5
        classpath 'com.didichuxing.doraemonkit:doraemonkit-plugin:3.1.5'
        classpath 'com.bugtags.library:bugtags-gradle:2.1.5'
    }
}

allprojects、buildscript、buildscript.repositories、buildscript.repositories.maven等预定于字段

gralde源码简析(暂时没写以后在写)


什么是Gradle Wrapper

实质上是一个脚本,自动使用申明版本的gradle 执行构建任务
新建项目时,将gradle-wrapper.jar&gradle-wrapper.properties 拷贝到项目的gradle/wrapper目录


常用的Gradle命令

上一篇下一篇

猜你喜欢

热点阅读