Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Gradle 进阶学习 之 build.gradle 文件

Gradle 进阶学习 之 build.gradle 文件

作者头像
叫我阿杰好了
发布于 2024-05-05 00:40:12
发布于 2024-05-05 00:40:12
1.7K00
代码可运行
举报
文章被收录于专栏:GradleGradle一切总会归于平淡
运行总次数:0
代码可运行
  1. build.gradle 是什么? 想象一下,你有一个大型的乐高项目,你需要一个清单来列出所有的乐高积木和它们如何组合在一起。在软件开发中,build.gradle 就是这个清单,它告诉计算机如何构建(组合)你的软件项目。
  2. 为什么每个项目都有一个 build.gradle 文件? 每个项目都像是一个独立的乐高套装,每个套装都有自己的清单来确保所有的积木(代码和资源)都能正确地组合在一起。这个清单就是 build.gradle 文件。
  3. build.gradle 文件里有什么? 在这个清单中,你会指定你的项目需要哪些积木(依赖库),这些积木的版本是什么,以及一些特殊的构建规则(比如如何编译代码)。
  4. 什么是 Project 实例? 可以把 Project 实例想象成一个项目经理,它负责管理你的乐高项目。build.gradle 文件中的配置实际上是在告诉这个项目经理如何管理项目。
  5. Root Project 和 Child Project 是什么? 如果你有一个大型的乐高项目,它可能由几个小项目组成。Root Project 就像是总负责人,它可以管理所有的小项目(Child Project)。在 Root Project 的 build.gradle 文件中,你可以为所有这些小项目设置一些共同的规则,比如它们都需要哪些通用的积木或者如何找到这些积木。

build 文件中常见的属性和方法如下所示:

Gradle的build 文件中常见的属性和方法
Gradle的build 文件中常见的属性和方法

1、常见属性代码

1.1 JDK版本兼容性设置

sourceCompatibility: 指定使用哪个版本的JDK语法来编译源代码。这与编译环境有关,且需要Java插件支持。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sourceCompatibility = 1.8

targetCompatibility: 指定生成特定于某个JDK版本的class文件。这与运行环境有关,同样需要Java插件支持。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
targetCompatibility = 1.8

1.2. 字符集设置

编译Java选项字符集: 设置业务编码的字符集,用于源码解码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compileJava.options.encoding "UTF-8"

编译测试Java选项字符集: 设置测试编码的字符集,同样用于源码解码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compileTestJava.options.encoding "UTF-8"

Java编译任务字符集: 在编译Java文件时指定使用UTF-8字符集,这影响源文件的编码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

Javadoc任务符集: 在生成Javadoc文档时指定使用UTF-8字符集,这影响文档的编码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tasks.withType(Javadoc) {
    options.encoding = "UTF-8"
}

提示1: group+name+version 的格式类似于Maven中的 group+artifactId+version,用于标识项目的唯一性。

提示2: 设置encoding属性可以解决业务代码和测试代码中的中文乱码问题。

2、仓库配置 (Repositories)

在Gradle中,仓库的配置顺序很重要,因为Gradle会按照配置的顺序从上到下依次搜索所需的jar包。一旦找到所需的依赖,Gradle将停止搜索,继续进行构建。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
repositories {
    // 使用本地文件系统的仓库,通常不推荐使用
    maven { url 'file:///D:/repos/mavenrepos3.5.4' }
    maven { url "$rootDir/lib/release" }

    // 指定查找Maven的本地仓库,通常Gradle会自动配置
    mavenLocal()

    // 指定查找Maven的私服或第三方镜像仓库
    maven { name "Alibaba"; url "https://maven.aliyun.com/repository/public" }
    maven { name "Bstek"; url "https://nexus.bsdn.org/content/groups/public/" }

    // 指定查找Maven的中央仓库,这是默认的远程仓库
    mavenCentral()

    // 指定查找Google的远程仓库
    google()
}

2.1 仓库配置说明

  1. 本地文件系统仓库:通过file协议指定本地磁盘目录作为仓库,这种方式不常用。
  2. Maven本地仓库mavenLocal()配置允许Gradle在本地Maven仓库中查找依赖。
  3. 第三方镜像仓库:例如AlibabaBstek,这些是公共的Maven仓库镜像,通常用于加速依赖下载,特别是在某些地区访问Maven中央仓库速度较慢时。
  4. Maven中央仓库mavenCentral()配置允许Gradle查找默认的Maven中央仓库,这是最常用的远程仓库之一。
  5. Google仓库google()配置允许Gradle查找Google的远程仓库,这通常包含了一些Android开发常用的库。

2.2 注意事项

  • Gradle默认配置了Maven中央仓库,通常不需要手动添加。
  • 在配置私服或第三方镜像时,需要确保网络可以访问这些仓库。
  • 仓库配置应该根据项目的实际需求和网络环境进行调整。

3、allprojects和subprojects配置

在Gradle中,allprojectssubprojects允许你为多个项目(包括根项目和所有子项目)统一配置一些构建设置。

  • allprojects:对根项目以及所有子项目进行统一配置。
  • subprojects:仅对所有子项目进行统一配置。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 对所有项目(包括根项目和子项目)配置一个名为 'hello' 的任务
allprojects {
    tasks.create('hello') {
        doLast {
            task ->
            println "project name is $task.project.name"
        }
    }
}

// 对所有子项目配置 'hello' 任务的额外行为
subprojects {
    hello.doLast {
        task ->
        println "here is subprojects $task.project.name"
    }
}

// 拓展:单独为一个子项目配置任务
project(':subject01') { // 注意这里是字符串加冒号的语法来指定子项目
    tasks.create('subject01') {
        doLast {
            println 'for subject01'
        }
    }
}

拓展说明

  1. 根项目配置:如果你在根项目的构建脚本中直接配置repositoriesdependencies,则这些配置只对根项目有效。
  2. 单独项目配置:你可以使用project('子项目路径')来单独为一个子项目配置任务或其他构建设置。

执行测试:

要查看测试效果,你可以在终端或命令行中运行gradle build指令。这将触发所有项目的构建过程,并执行你在allprojectssubprojects中定义的任务。

注意事项

  • allprojectssubprojects中定义的任务是惰性配置的,意味着它们只在实际执行时才会被创建。
  • 使用project('子项目路径')时,需要确保路径正确,并且该子项目已经在你的多项目构建中被定义。
  • 过度使用allprojectssubprojects可能会使构建配置变得难以管理,因此建议只在真正需要统一配置时使用。

4、ext 用户自定义属性

在Gradle中,ext(extension)属性允许用户在Project和Task对象中定义自定义属性。这些属性可以在构建脚本中读取和设置,也可以通过代码块一次性定义多个属性。

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 自定义一个Project的属性
ext.age = 18

// 通过代码块同时自定义多个属性
ext {
    phone = 110
    address = "警察局"
}

// 在task中自定义属性
task extCustomProperty {
    // 使用ext代码块在task中定义自定义属性
    ext {
        desc = "奥利给"
    }
    doLast {
        println "年龄是:${age}"
        println "电话是:${phone}"
        println "地址是:${address}"
        println "阿杰:${desc}"
    }
}

测试

要测试自定义属性,可以在命令行中运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gradle extCustomProperty

输出结果将为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
年龄是:18
电话是:110
地址是:警察局
阿杰:奥利给

拓展 1: gradle.properties 配置:

gradle.properties 文件用于定义系统属性、环境变量、项目属性和JVM相关配置。这些属性在项目运行时自动加载,可以用来调整Gradle的行为和性能。

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 设置JVM参数以避免内存溢出
org.gradle.jvmargs=-Xms4096m -Xmx8192m

# 开启Gradle缓存
org.gradle.caching=true

# 开启并行编译
org.gradle.parallel=true

# 启用新的孵化模式
org.gradle.configureondemand=true

# 开启守护进程
org.gradle.daemon=true

更多关于Gradle配置属性的信息,可以参考官方文档:

5、Buildscript

buildscript块用于定义Gradle构建过程中所需的依赖,这些依赖通常是一些插件或库,它们对于执行构建脚本是必要的。buildscript必须位于build.gradle文件的最前端。

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.commons.codec.binary.Base64

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        // 添加commons-codec库到构建脚本的类路径
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
    }
}

// 注册一个名为'encode'的任务
tasks.register('encode') {
    doLast {
        // 使用Base64编码hello world字符串
        def byte[] encodedString = new Base64().encode('hello world\n'.getBytes())
        println new String(encodedString)
    }
}

注意事项

  1. 位置buildscript{}必须位于build.gradle文件的最前端。
  2. 多项目构建:在多项目构建中,根项目的buildscript()声明的依赖关系可用于其所有子项目的构建脚本。
  3. Gradle插件:构建脚本依赖也可能是Gradle插件,它们可以提供额外的构建功能。

插件应用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
buildscript {
    ext {
        springBootVersion = "2.3.3.RELEASE"
    }
    repositories {
        mavenLocal()
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
        jcenter()
    }
    // 添加Spring Boot插件到构建脚本的类路径
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

// 应用核心Java插件
apply plugin: 'java'
// 应用Spring Boot插件
apply plugin: 'org.springframework.boot'

在这个示例中,我们首先定义了一个扩展属性springBootVersion,然后在buildscriptdependencies块中使用这个属性来指定Spring Boot插件的版本。接着,我们通过apply plugin语句应用了Java核心插件和Spring Boot插件。

拓展

  • 仓库服务:您提供的链接指向了阿里云的Maven仓库服务,这是一个私有Maven制品仓库,可以用于存储和管理制品,如二进制库和插件。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Gradle build.gradle 文件
提示 1:group+name+version 类似于 maven 的 group+artifactId+version 提示 2:encoding 解决业务代码与测试代码中文乱码问题
鱼找水需要时间
2023/02/16
1.2K0
Gradle build.gradle 文件
Android Gradle 学习笔记整理
对于Android开发人员已经了解build.gradle 的 android{} 和 dependencies{} ,但是他的编译过程是什么样的?这个过程中可以干些什么事了解吗?
做个快乐的码农
2021/12/14
1K0
Android Gradle 学习笔记整理
Gradle基础操作一
使用 Project.file(java.lang.Object)方法,通过指定文件的相对路径或绝对路径来对文件的操作,其中相对路径为相对当前project[根project 或者子project]的目录。其实使用Project.file(java.lang.Object)方法创建的 File 对象就是 Java 中的 File 对象,我们可以使用它就像在 Java 中使用一样。示例代码如下:
@派大星
2023/06/28
4260
Gradle基础操作一
gradle中的build script详解
build.gradle是gradle中非常重要的一个文件,因为它描述了gradle中可以运行的任务,今天本文将会带大家体验一下如何创建一个build.gradle文件和如何编写其中的内容。
程序那些事
2021/02/13
1.3K0
【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ② ( settings.gradle 构建脚本分析 | 根目录下 build.gradle 分析 )
在 dependencyResolutionManagement 脚本块 中 定义的 repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 代码的含义是 解析依赖时 , 只能使用本脚本块中的 Maven 仓库 , 不能使用 Module 子项目中的依赖 ;
韩曙亮
2023/03/28
2.1K0
【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ② ( settings.gradle 构建脚本分析 | 根目录下 build.gradle 分析 )
第三章 Gradle构建脚本基础
从这章开始,会对Gradle有一个大概的介绍,帮助大家快速的入门Gradle。本章从整体构建脚本的角度介绍Gradle,什么是Settings文件,他有什么作用;什么是Build文件,它又有什么作用,我们可以新建多少Build文件。
acc8226
2022/05/17
5070
第三章 Gradle构建脚本基础
Gradle 进阶学习之 Gradle插件
使用插件是现代自动化构建工具中一个非常重要的概念,Gradle 作为其中一个流行工具,通过插件提供了多种便利。以下是使用插件的几个主要原因:
叫我阿杰好了
2024/05/05
5690
Gradle 进阶学习之 Gradle插件
Android-Gradle(二) Gradle相关配置详解
Gradle是一个项目自动化建构工具,它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。Gradle主要帮我们做了依赖,打包,部署,发布,各种渠道的差异管理等工作。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
android_薛之涛
2019/08/23
3.3K0
Android-Gradle(二) Gradle相关配置详解
gradle_学习_02_gradle多模块构建实例
一、前言 二、多模块构建 1.工程结构  父工程:weixin-service 子模块:weixin-gz                weixin-qy 2.父工程 weixin-service
shirayner
2018/08/10
3150
gradle_学习_02_gradle多模块构建实例
Gradle构建多模块SpringBoot应用
本文是一篇笔记,通过实战将Gradle构建多模块的步骤记录下来,为今后新建的项目准备一个脚手架,该脚手架由两个子模块组成:二方库、SpringBoot应用,本文由以下内容组成:
程序员欣宸
2021/12/07
1.8K0
Gradle构建多模块SpringBoot应用
边学边用Gradle:Gradle的脚本结构
配置此项目的构建脚本类路径。可声明用于编译和执行构建脚本的类路径。该类路径也用于加载构建脚本使用的插件。
WindCoder
2018/09/19
1.7K0
工具篇 | Gradle入门与使用指南 - 附Github仓库地址
Gradle是一个开源构建自动化工具,专为大型项目设计。它基于DSL(领域特定语言)编写,该语言是用Groovy编写的,使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序,还支持多种语言和技术,例如C++、Python、Android等。
kfaino
2023/09/26
3.6K0
工具篇 | Gradle入门与使用指南 - 附Github仓库地址
build.gradle文件介绍,gradle版本对应
Could not find com.android.tools.build:gradle:3.0.1.
zhangjiqun
2024/12/16
4620
build.gradle文件介绍,gradle版本对应
一篇文章掌握Gradle多项目构建
在使用 Android Studio 作为 IDE 之后,Android 项目就开始使用 Gradle 作为构建脚本,Gradle 的优点就不用我多说了,使用 Groovy 作为开发语言,配合各种 Gradle 插件和 DSL 可以实现多样化的构建过程。
蜻蜓队长
2018/08/03
1.3K0
Gradle的使用教程
下载地址http://services.gradle.org/distributions/ ,下载你所需要对应的版本,我这里下载的是gradle-4.7-bin.zip。下载后解压到你想要的目录即可,然后设置环境变量:
全栈程序员站长
2022/09/14
9830
Gradle的使用教程
Android Gradle 初识
最近在研究一些技术,需要一些Android相关的知识,但发现要想了解 Android,必须要了解 gradle。因为gradle是Android Studio指定的自动编译脚本,它有点像 Linux C开发中的 Makefile。下面我来看下 Android Studio 是如何使用 Gradle 的。
音视频_李超
2020/04/01
5410
Android  Gradle 初识
Gradle构建多模块SpringBoot应用
本文是一篇笔记,通过实战将Gradle构建多模块的步骤记录下来,为今后新建的项目准备一个脚手架,该脚手架由两个子模块组成:二方库、SpringBoot应用,本文由以下内容组成:
程序员欣宸
2021/09/21
1.5K0
Gradle构建多模块SpringBoot应用
Gradle 笔记
Task 是 Gradle 构建的最小执行单元。 clean 就是一种最常见的 Task。
tonglei0429
2019/07/24
6610
Gradle教程「建议收藏」
在本课程中,我们将学习Gradle ,它是一个构建工具和一个依赖管理系统,与Maven和Ant非常相似,并且是专门为构建基于Java的项目而设计的。
全栈程序员站长
2022/09/14
2.4K0
Gradle教程「建议收藏」
Gradle 插件
在项目构建过程中做很多事情,把插件应用到项目中,通常可以完成: 1、可以添加任务【task】到项目中,从而帮助完成测试、编译、打包等。 2、可以添加依赖配置到项目中。 3、可以向项目中拓展新的扩展属性、方法等。 4、可以 对项目进行一些约定,如应用 Java 插件后,约定 src/main/java 目录是我们的源代码存在位置,编译时编译这个 目录下的 Java 源代码文件
鱼找水需要时间
2023/02/16
6890
Gradle 插件
相关推荐
Gradle build.gradle 文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验