• Android学习笔记 1.2.5 Gradle插件和java、application等插件 && 1.2.6 依赖管理


    Android学习笔记

    疯狂Android讲义

    第1章 Android 应用和开发环境

    1.2 使用Gradle自动化构建项目
    1.2.5 Gradle插件和java、application等插件

    为了简化开发人员编写构建文件的工作,Gradle提供了插件机制。
    开发 Gradle插件很简单,无非就是在插件中预先定义大量的任务类型、任务、属性等(后文会介绍如何开发自定义插件),接下来开发人员只要在 build.gradle文件中使用如下代码来应用插件即可。

    apply plugin : 插件名
    
    • 1

    应用插件就相当于引入了该插件包含的所有任务类型、任务和属性等,这样 Gradle即可执行插件中预先定义好的任务。

    示例——仅在构建文件中加入java插件

    在这里插入图片描述

    • assemble:装配整个项目
    • build:装配并测试该项目
    • buildDependents:装配并测试该项目,以及该项目的依赖项目。
    • buildNeeded:与buildDependents任务基本相同。
    • classes:装配该项目的所有类。
    • clean:删除构建目录的所有内容。属于Delete类型的任务。
    • jar:将项目的所有类打包成JAR包。属于Jar类型的任务。
    • testClasses:装配所有测试类。
    • init:执行构建的初始化操作。
    • wrapper:生成 Gradle包装文件。
    • javadoc:为所有类生成 API文档。属于Javadoc类型的任务。
    • compileJava:编译项目的所有主Java源文件。属于JavaCompile类型的任务。
    • compileTestJava:编译项目的所有测试Java源文件。属于JavaCompile类型的任务。
    • processResources:处理该项目的所有主资源。属于Copy类型的任务。
    • processTestResources:处理该项目的所有测试资源。属于Copy类型的任务。

    此外,java插件还定义了大量属性,比如 sourceCompatibility属性用于指定在编译Java源文件时所使用的JDK版本;archivesBaseName属性用于指定打包成JAR包时的文件名。
    在默认情况下,java插件要求将项目源代码和资源都放在src目录下,将构建生成的字节码文件和资源放在 build目录下,该插件会自动管理该目录下的两类源代码和资源。

    • main:项目的主代码和资源。
    • test:项目的测试代码和资源。

    main和 test目录都可包含java和 resources两个子目录,其中java子目录存放Java源文件;resources子目录存放资源文件。

    main和 test目录的内容基本相同,区别只是main目录存放项目的主代码和资源;而test目录存放项目的测试代码和资源。

    在这里插入图片描述

    开发者可以在构建文件中通过sourceSets方法来改变项目主代码、资源的存储路径,也可通过该方法改变测试代码和资源的存储路径。

    此外,如果项目需要添加第三方或额外依赖的源代码,则可通过sourceSets方法进行配置。为了配置第三方或额外依赖的源代码路径,需要使用sourceSets方法

    //配置被依赖的源代码路径
    sourceSets {
        fkframework
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    Gradle会自动为每一个新创建的 sourceSet创建相应的 Task,创建规律为
    对于名为“fkframework”的 sourceSet,Gradle将为其创建compileFkframeworkJava、processFkframework-Resources和 fkframeworClasses这3个Task,它们的作用分别类似于compileJava、processResources和classes——区别只是前面3个Task 处理 fkframework目录下的Java源代码和资源,而后面3个Task处理main目录下的Java源代码和资源。

    对于main而言, Gradle生成的3个任务并不是compileMainJava、 processMainResources和mainClasses,这是由于main是 Gradle默认创建的主sourceSet,因此 main对应的3个任务就不需要“main”名称了。

    apply plugin: 'java'
    apply plugin: 'application'
    // 指定run任务执行的主类
    mainClassName = 'dingjiaxiong.HelloWorld'
    task showProjectProps {
        doLast {
            properties.each {
                e -> println e
            }
        }
    }
    // 配置被依赖的源代码路径
    sourceSets {
        fkframework
    }
    // 为run任务的classpath增加fkframework的类
    run.classpath = sourceSets.main.runtimeClasspath +
            files(sourceSets.fkframework.output.classesDirs)
    // 配置compileJava任务依赖compileFkframeworkJava任务
    compileJava.dependsOn compileFkframeworkJava
    sourceSets {
        main {
            // 将fkframework生成的字节码文件的存储路径添加到编译时类路径中
            compileClasspath = compileClasspath + files(fkframework.output.classesDirs)
        }
        test {
            // 将fkframework生成的字节码文件的存储路径添加到运行时类路径中
            runtimeClasspath = runtimeClasspath + files(fkframework.output.classesDirs)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

    运行

    在这里插入图片描述

    1.2.6 依赖管理

    在构建Java项目时通常都要依赖一个或多个框架,Gradle既可像Maven那样从仓库(远程仓库和本地仓库都行)中下载所依赖的JAR包,也可像Ant那样直接引用项目路径下的JAR包,非常方便。

    配置依赖:

    • 为Gradle配置仓库。目的是告诉Gradle到哪里下载jar包
    • 为不同的组配置依赖JAR包,目的是告诉Gradle要下载哪些JAR包

    使用maven中央仓库

    //定义仓库
    repositories {
        //使用maven默认的中央仓库
        mavenCentral()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Gradle也允许显式指定maven仓库的URL

    在这里插入图片描述

    Gradle还允许直接使用本地磁盘路径作为Maven仓库

    在这里插入图片描述

    第2步是为了告诉Gradle需要下载哪些JAR包,并为不同的组配置数量不等的JAR包

    配置组:

    configurations {
        //配置名为fkDependency的依赖组
        fkDependency
    }
    
    • 1
    • 2
    • 3
    • 4

    为fkDependency依赖组添加jar包

    dependencies {
        //配置依赖jar包
        fkDependency group : 'commons-logging',name : 'commons-logging',version :'1.2'
        //简写
        fkDependency 'commons-logging:commons-logging:1.2'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    简写形式使用较多

    repositories {
        //Maven远程仓库
        //显式指定Maven仓库的URL
        maven { url "https://maven.aliyun.com/repository/public" }
    }
    
    configurations {
        //配置名为fkDependency的依赖组
        fkDependency
    }
    
    dependencies {
        fkDependency 'commons-logging:commons-logging:1.2',
                "org.apache.commons:commons-dbcp2:2.2.0"
    }
    
    task showFkDependency {
        doLast {
            // 输出fkDependency的依赖的JAR包
            println configurations.fkDependency.asPath
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

  • 相关阅读:
    FinClip 助力商家全副武装迎战
    select查询题目练习
    混合精度训练原理之float16和float32数据之间的互相转换
    三个禁止使用U盘的方案
    Linux常用的压缩和解压命令gzip,gunzip,tar,zip, unzip和bzip2,bunzip2
    分布式概念与协议
    Redis bigkey管理
    Spring SSM整合步骤
    【云原生之Docker实战】使用Docker部署Lanraragi个人漫画管理器
    MyBatis之关联关系
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126435453