Gradle 进阶学习 之 build.gradle 文件

  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 文件中常见的属性和方法

1、常见属性代码

1.1 JDK版本兼容性设置

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

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

    targetCompatibility = 1.8
    

1.2. 字符集设置

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

    compileJava.options.encoding "UTF-8"
    
  • 编译测试Java选项字符集: 设置测试编码的字符集,同样用于源码解码。

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

    tasks.withType(JavaCompile) {options.encoding = "UTF-8"
    }
    
  • Javadoc任务符集: 在生成Javadoc文档时指定使用UTF-8字符集,这影响文档的编码。

    tasks.withType(Javadoc) {options.encoding = "UTF-8"
    }
    
  • 提示1: group+name+version 的格式类似于Maven中的 group+artifactId+version,用于标识项目的唯一性。

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

2、仓库配置 (Repositories)

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

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:仅对所有子项目进行统一配置。
// 对所有项目(包括根项目和子项目)配置一个名为 '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对象中定义自定义属性。这些属性可以在构建脚本中读取和设置,也可以通过代码块一次性定义多个属性。

示例

// 自定义一个Project的属性
ext.age = 18// 通过代码块同时自定义多个属性
ext {phone = 110address = "警察局"
}// 在task中自定义属性
task extCustomProperty {// 使用ext代码块在task中定义自定义属性ext {desc = "奥利给"}doLast {println "年龄是:${age}"println "电话是:${phone}"println "地址是:${address}"println "阿杰:${desc}"}
}

测试

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

gradle extCustomProperty

输出结果将为:

年龄是:18
电话是:110
地址是:警察局
阿杰:奥利给

拓展 1: gradle.properties 配置:

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

示例

# 设置JVM参数以避免内存溢出
org.gradle.jvmargs=-Xms4096m -Xmx8192m# 开启Gradle缓存
org.gradle.caching=true# 开启并行编译
org.gradle.parallel=true# 启用新的孵化模式
org.gradle.configureondemand=true# 开启守护进程
org.gradle.daemon=true

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

  • Configuring the Build Environment

5、Buildscript

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

示例

import org.apache.commons.codec.binary.Base64buildscript {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插件,它们可以提供额外的构建功能。

插件应用示例

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制品仓库,可以用于存储和管理制品,如二进制库和插件。

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

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

相关文章

这是一个简单的照明材料网站,后续还会更新

1、首页效果图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>爱德照明网站首页</title><style>/*外部样式*/charset "utf-8";*{margin: 0;padding: 0;box-sizing: border-box;}a{text-dec…

开源版本管理系统的搭建一:SVN

作者&#xff1a;私语茶馆 1.Windows搭建SVN版本管理系统 1.1.SVN概要和组成 背景介绍 Svn是一个开源版本管理系统&#xff0c;由CollabNet公司于2000年发布&#xff0c;23年12月发布最新版本Apache Subversion 1.14.3。官方网站&#xff1a;Apache Subversion。 Svn可以直…

G1 - 生成对抗网络(GAN)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 理论知识生成器判别器基本原理 环境步骤环境设置数据准备模型设计模型训练模型效果展示 总结与心得体会 理论知识 生成对抗网络&#xff08;Generative …

U盘惊现“USBC乱码”?别急,数据恢复有妙招!

近日&#xff0c;不少用户反馈在将U盘插入电脑后&#xff0c;出现了一个令人困惑的问题&#xff1a;U盘里的文件或文件夹名突然变成了无法识别的乱码&#xff0c;甚至整个U盘的文件系统显示为“USBC乱码”。面对这种情况&#xff0c;用户往往感到无从下手&#xff0c;担心重要数…

【知识加油站】——机电产品数字孪生机理模型构建

明确一种多领域、多层次、参数化、一致性的机电一体化装备数字孪生机理模型构建准则&#xff01; 关键词英文简称&#xff1a; 数字孪生&#xff1a;DT物联网&#xff1a;IoT网络物理系统&#xff1a;CPS高级架构&#xff1a;HLA统一建模语言&#xff1a;UML数控机床&#xf…

webpack打包工具

目录 1. yarn包管理器 1.1 yarn 是什么, 有什么用? 1.2 yarn的使用 ​​​​​​2. webpack基本概述 2.1 webpack是什么&#xff1f; 2.2 什么是打包&#xff1f; 2.3 webpack能做什么&#xff1f; 3. webpack基本使用步骤 3.1 webpack基本使用步骤 3.2 package.jso…

阿里低代码引擎学习记录

官网 一、关于设计器 1、从设计器入手进行低代码开发 设计器就是我们用拖拉拽的方法&#xff0c;配合少量代码进行页面或者应用开发的在线工具。 阿里官方提供了以下八个不同类型的设计器Demo&#xff1a; 综合场景Demo&#xff08;各项能力相对完整&#xff0c;使用Fusion…

转速和频率转换功能块(CODESYS ST源代码)

1、转速/频率常用转换关系 转速/频率/线速度/角速度计算FC_200 plc计算角速度-CSDN博客文章浏览阅读3.2k次。里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,关于绕线机的绕线算法,大家可以参看专…

手写一个uart协议——rs232

先了解一下关于uart和rs232的基础知识 文章目录 一、RS232的回环测试1.1模块整体架构1.2 rx模块设计1.2.1 波形设计1.2.2代码实现与tb1.2.4 仿真 1.3 tx模块设计1.3.1 波形设计1.3.2 代码实现与tb1.3.4 顶层设计1.3.3 仿真 本篇内容&#xff1a; 一、RS232的回环测试 上位机…

Leaflet在WGS84 Web墨卡托投影与WGS84经纬度投影下空间信息变形问题及修正-以圆为例

目录 前言 一、投影的相关知识 1、经纬度投影 2、Web墨卡托投影 二、经纬度投影下的空间信息展示 1、空间信息展示 2、效果展示 3、经纬度投影下的圆修正 三、Web墨卡托投影下空间信息展示 1、底图引用 2、自定义生成圆 总结 前言 在GIS的知识海洋中&#xff0c;对…

记一次从登录框到前台rce

接口未授权挖掘 在网站未登录的情况下&#xff0c;由于不知道后台接口。唯一办法通过js文件、路径扫描。通过这种收集方式使用burp进行批量扫描&#xff0c;分别探测GET/POST请求。观察响应包跟状态码。判断响应包&#xff0c;确定存在未授权后&#xff0c;再构造数据包。 2 突…

【JVM】Java工具(Arthas,APM,Java Agent,JMX)

Java工具 常见的Java工具有以下几类&#xff1a; 1、诊断类工具&#xff0c;如Arthas、VisualVM等。 2、开发类工具&#xff0c;如Idea、Eclipse。 3、APM应用性能监测工具&#xff0c;如Skywalking、Zipkin等。 4、热部署工具&#xff0c;如Jrebel等。 Arthas中 Java Ag…

【kettle006】kettle访问华为openGauss高斯数据库并处理数据至execl文件(已更新)

1.一直以来想写下基于kettle的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下华为openGauss高斯数据库相关知识体系 3.欢迎批评指正&#xff0c;跪谢…

zookeeper 都有哪些使用场景?(最全 zookeeper 用法介绍)

目录 一、面试官心理分析 二、面试题剖析 1.分布式协调 2.分布式锁 3.元数据/配置信息管理 4.HA高可用性 一、面试官心理分析 现在聊的是分布式系统&#xff0c;面试官跟你聊完了 dubbo 相关的一些问题之后&#xff0c;已经确认你对分布式服务框架/RPC框架基本都有一些认…

windows驱动开发-PNP管理器

PNP技术是由Microsoft提出的&#xff0c;英文Plug and play的缩写&#xff0c;中译即插即用&#xff0c;意思是系统自动侦测周边设备和板卡并自动安装设备驱动程序&#xff0c;做到插上就能用&#xff0c;无须人工干预&#xff0c;是Windows自带的一项技术。所谓即插即用是指将…

计算机网络chapter2——应用层

文章目录 第2章 应用层章节引出—— 2.1应用层协议原理2.1.1 网络应用程序体系结构&#xff08;1&#xff09;客户-服务器体系结构&#xff08;2&#xff09;对等(P2P)体系结构2.1.2 进程通信1.客户和服务器进程2.进程与计算机网络之间的接口3. 进程寻址 2.1.3 可供应用程序使用…

STM32数字示波器+详细注释+上位机程序+硬件

目录 1、设计指标&#xff1a; 2、功能&#xff1a; 3、上位机的程序 ​4、测试的照片 5、PCB 6、模拟电路板 7、程序 资料下载地址&#xff1a;STM32数字示波器详细注释上位机程序硬件 1、设计指标&#xff1a; 主控: STM32…

中华科技控股集团:人工智能标准化引领者与数字化服务新航程的启航者

4月30日, 矗立于时代科技潮头的中华科技控股集团&#xff0c;自2010年在香港这片国际金融沃土上诞生以来&#xff0c;便以其独特的国资背景与全球化视野&#xff0c;肩负起推动中国科技进步与产业升级的重任。作为国资委麾下的重要一员&#xff0c;中华科技始终坚持创新驱动发展…

MLP手写数字识别(2)-模型构建、训练与识别(tensorflow)

查看tensorflow版本 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())1.MNIST的数据集下载与预处理 import tensorflow as tf from keras.datasets import mnist from keras.utils import to_categori…

Adobe 更新 Firefly Image 3 图像生成模型

一个工具或者模型&#xff0c;对于初次使用的人来说&#xff0c;易用性和超出预期的效果很能吸引使用者&#xff0c;suno和mj在这方面我感觉确实不错&#xff0c;第一次使用感觉很惊艳。 Adobe 更新 Firefly Image 3 图像生成模型&#xff0c;我用了mj的提示词&#xff0c;最后…