Gradle学习笔记之build.gradle文件

news2025/7/18 20:41:32

文章目录

  • 简介
  • 常见属性代码
  • 仓库
  • subprojects和allprojects
  • ext自定义属性
  • buildscript

简介

build.gradle是gradle构建脚本文件,支持java、groovy等语言。

每个gradle项目或模块都会有一个build.gradle文件,该文件是项目构建的入口,可配置版本、插件依赖库等信息。

每个build文件都有一个对应的project实例,配置build.gradle文件,实际就是设置project实例里面的属性,或者调用里面的方法。

根项目的project实例可以获取到所有子项目或子模块的project实例,因此我们可以在根项目的build.gradle文件中对子项目进行统一配置,比如应用插件、依赖的maven中心仓库等,常见的build.gradle属性及方法如下所示:
在这里插入图片描述

常见属性代码

// 指定使用什么版本的JDK语法编译源代码,跟编译环境有关,在有java插件时才能用
sourceCompatibility = 1.8
// 指定生成特定于某个JDK版本的class文件:跟运行环境有关,在有java插件时才能用
targetCompatibility = 1.8
// 业务编码字符集,注意这是指定源码解码的字符集[编译器]
compileJava.options.encoding "UTF-8"
// 测试编码字符集,注意这是指定源码解码的字符集[编译器]
compileTestJava.options.encoding "UTF-8"
// 编译JAVA文件时采用UTF-8:注意这是指定源码编码的字符集【源文件】
tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}
// 编译JAVA文件时采用UTF-8:注意这是指定文档编码的字符集【源文件】
tasks.withType(Javadoc) {
    options.encoding = "UTF-8"
}

仓库

repositories {
    // gradle中会按着仓库配置的顺序,从上往下依次去对应的仓库中找所需要的jar包:
    // 如果找到,则停止向下搜索,如果找不到,继续在下面的仓库中查找

    // 指定去本地某个磁盘目录中查找:使用本地file文件协议:一般不用这种方式
    maven { url 'file:///D:/repos/mavenrepos3.5.4'}
    maven { url "$rootDir/lib/release" }

    // 指定去maven的本地仓库查找
    mavenLocal()

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

    // 指定去maven的远程仓库查找:即 https://repo.maven.apache.org/maven2/
    mavenCentral()
    // 去google仓库查找
    google()
}

subprojects和allprojects

例如:

allprojects {
    tasks.create("all_test") {
        println("Here we are at ${project.name}")
    }
}


subprojects {
    tasks.create("test_sub") {
        println("Here we are at ${project.name} in subproject")
    }
}

执行gradle build后的输出如下:

(base) PS D:\develop\ideaWorkspace\GradleTest> gradle build -q
Here we are at GradleTest
Here we are at lib1
Here we are at lib2
Here we are at lib3
Here we are at myplugin
Here we are at lib1_1
Here we are at lib1_2
Here we are at lib1 in subproject
Here we are at lib2 in subproject
Here we are at lib3 in subproject
Here we are at myplugin in subproject
Here we are at lib1_1 in subproject
Here we are at lib1_2 in subproject

可见在subprojects的输出中,没有根项目GradleTest。一般来说,subprojectsallprojects是用来配置依赖的。我们也可以通过按名字或相对路径对某个项目进行单独配置:

project("lib2" /*或者:lib2*/ ) {
    tasks.create("test_sub2") {
        println("Here we are at ${project.name} in subproject test 2")
    }
}

ext自定义属性

ProjectTask对象都允许用户添加额外的自定义属性,通过读写ext属性即可实现。如果要同时添加多个自定义属性,通过ext代码块即可:

ext.age = 25
ext {
    name = "szc"
    phone = "1234"
}

task "test_ext" {
    ext {
        desc = "nothing much"
    }

    doLast {
        println "name: ${name}\nphone: ${phone}\nage: ${age}\ndescription: ${desc}"
    }
}

输出如下:

> Task :test_ext
name: test_ext
phone: 1234
age: 25
description: nothing much

系统信息、环境变量、项目属性、JVM配置等信息可在gradle.properties中定义,例如:

# 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出
org.gradle.jvmargs=-Xms4096m -Xmx8192m

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

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

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

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

buildscript

buildscript代码段是gradle脚本所需依赖,包括maven库和插件,示例:

import org.apache.commons.codec.binary.Base64

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
    }
}

tasks.register('encode') {
    doLast {
        def byte[] encodedString = new Base64().encode('hello world\n'.getBytes())
        println new String(encodedString)
    }
}

需要注意的是:
1)、buildscript代码段必须是build.gradle文件的第一个代码段;
2)、对于多模块构建,项目的buildscript代码段声明的依赖关系可用于所有子模块的构建脚本;
3)、构建脚本的依赖可能是gradle插件
比如以前在插件一文用的示例:

// 使用传统的应用方式,且buildScript标签必须在所有标签之前
buildscript {
    ext {
        springBootVersion = "2.3.3.RELEASE"
    }
    repositories {
        mavenLocal()
    }

    // 此处先引入插件
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

.....

// 而后再应用插件,在plugins标签之后应用
apply plugin: 'org.springframework.boot' // 社区插件,需要事先引入,不必写版本号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【RabbitMQ二】——RabbitMQ入门教程(简单模式)

RabbitMQ入门教程(简单模式)前言RabbitMQ相关术语RabbitMQ简单模式示例总结如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!前言 本篇博客主要是实现RabbitMQ最简单的模式,一个生产者,一…

【指针笔试题上】你知道大厂面试题的指针题是什么样的吗?快来通过这些面试题目检测一下自己吧!

目录 前言: 一.strlen和sizeof的区别 二.一维数组笔试题解析 三.二维数组笔试题解析 四.总结: 博客主页:张栩睿的博客主页 欢迎关注:点赞收藏留言 系列专栏:c语言学习 家人们写博客真的很花时间的,你们…

【自学Docker】一文解决Docker安装

Docker Centos安装 Docker版本 Docker 从 1.13 版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。 Docker社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器…

1.1 java 基础语法

目录 一、Java 基础语法 (1)对象: (2)类: (3)方法: (4)实例变量: 二、如何运行java程序(前提是java的环境已经创建完…

19.Isaac教程--C语言接口(Isaac C API)

Isaac C API ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录Isaac C API程序流程和消息格式ROS示例独立示例启动和停止应用程序向 Isaac 应用程序发布消息从 Isaac 应用程序接收消息语言环境设置示例消息ImageProtoRangeScanProtoStateP…

C语言 八皇后(包含错误代码及分析)

基本思路:用递归思想解决,在8*8的棋盘放置8个皇后,则放置成功会每行有且仅有一个皇后(因为皇后不能同行),所以可以循环行,尝试在某列放置,和 全排列 http://t.csdn.cn/kvIXC 的解决方…

vulnhub DC系列 DC-4

总结:爆破,teehee提权 目录 下载地址 漏洞分析 信息收集 密码爆破 命令执行 ​编辑 ssh爆破 提权 下载地址 DC-4.zip (Size: 617 MB)Download: http://www.five86.com/downloads/DC-4.zipDownload (Mirror): https://download.vulnhub.com/dc/D…

远程连接mysql报错:1130 - Host XXX is not allowed to connect to this MySQL server

问题描述 1130 - Host 123.120.193.96 is not allowed to connect to this MySQL server 译:不允许主机 123.120.193.96 连接到此 MySQL 服务器 远程连接的时候出现如下错误: 问题分析 根据描述提示,在用Navicat配置远程连接Mysql数据库时遇…

【Node.js】写一个数据自动整理成表格的脚本

前言 企业项目进行数据埋点后,埋点事件名需要整理成Excel表格便于统计,目标是将下图左侧数据转化成下图右侧的Excel表格: 考虑到左侧埋点数据是随项目迭代增加的,埋点数据每增加一次我就要把数据一条一条的CtrlC/V复制粘贴至Ex…

春节要放假了,外贸人你准备好了吗?

一转眼,老外们的假期即将结束,而我们的春节假期即将开启。有人会想:工作一年了,好不容易春节放个假,我是不是应该好好休息了?对别人是!但是对于我们外贸人,并不是!很多外…

第十三届蓝桥杯C++B组省赛 J 题——砍竹子(AC)

1.砍竹子 1.题目描述 这天,小明在砍竹子,他面前有 nnn 棵竹子排成一排,一开始第 iii棵竹子的高度为 hihihi。 他觉得一棵一棵砍太慢了,决定使用魔法来砍竹子。 魔法可以对连续的一段相同高度的竹子使用,假设这一段…

数学基本算法

欧几里得算法 求两个数的最大公约数: /**** param a 整数* param b 整数* return 两个整数的最大公约数*/public static int gcd(int a,int b){return b0?a:gcd(b,a%b);} 扩展欧几里得 /*** * param a * param b (a,b)两个整数* param x * param y (x,y)…

LeNet5模型与全连接模型的差异

1 问题深度学习训练过程中,有很多的训练模型,我们组就在思考LeNet模型与之前运用的全连接模型在训练精度损失与验证精度损失上有什么差别?2 方法这是LeNet模型的主要代码,对数据进行两成卷积与两次池化之后再建立三成全连接即可。…

Oracle数据库的监控指标

一、Oracle 监控指标 Oracle数据库常见性能指标主要有:当前登录数、非阻塞锁数、当前死锁数、阻塞锁数、当前锁数、会话数等内容,如下图所示。 注意:以下是 Oracle 监控所需要的指标,具体根据需要监控哪些、超阈值而定。 1.1 新建主机群组 1.2 新建模板 1.3 创建主机 …

Qt 6.4.2在Windows上安装过程及简单验证

Qt是一个跨平台的C开发库,用来开发图形用户界面(Graphical User Interface, GUI)。它支持Windows、Linux、macOS、Android、iOS、QNX等平台,一个框架、一套代码库、任意平台部署。Qt有开源和商业两种许可。 Qt从5.15开始官方不再直接提供开源的exe…

H5——连连看小游戏实现思路及源码

部门要求推广新产品用连连看小游戏的方式, 设计那边UI还没有排期,先撸个功能demo,正好记录一下; 连连看都玩过,程序的关键在于判断连续点击的两张图片是否能够消除,两个图片消除的条件有两个: …

【3 - 特征工程】菜菜sklearn机器学习

课程地址:《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期:sklearn入门 & 决策树在sklearn中的实现第二期:随机森林在sklearn中的实现第三期:sklearn中的数据预处理和特征工程第四期:sklearn中的降维算法…

Blog Navigation

Blog Navigation Linux Kernel 0x01_LinuxKernel_内核的启动(一)之启动前准备[2022-7-5]0x02_LinuxKernel_内核的启动(二)SMP多核处理器启动过程分析 [TODO]0x21_LinuxKernel_内核活动(一)之系统调用 [20…

【OpenGL学习】OpenGL窗口创建

OpenGL窗口创建 本节介绍如何在利用配置好的GLFW和GLAD进行一个简单窗口的绘制,首先明白在OpenGL中进行图形绘制到窗口的整个流程: 初始化GLFW创建窗口window创建OpenGL上下文初始化Glad渲染循环结束绘制 初始化GLFW 然后我们从上面的流程逐步进行窗…

知微传感3D相机SDK开发文档一查找相机

知微传感3D相机SDK开发文档一查找相机 主要对知微传感3D相机的SDK文件做一个介绍,大家一个界面显示程序包含图像的获得,相机的查找和链接 查找相机,通过UDP广播形式查找局域网相机链接相机,通过IP地址链接局域网内的相机获取图片&…