首页 > 其他分享 >Gradle build.gradle 文件

Gradle build.gradle 文件

时间:2023-01-19 10:00:35浏览次数:42  
标签:Project 插件 Gradle maven build org gradle 属性


  • build.gradle 是一个 gradle 的构建脚本文件,支持 java、groovy 等语言。
  • 每个 project 都会有一个 build.gradle 文件,该文件是项目构建的入口,可配置版本、插件、依赖库等信息。
  • 每个 build 文件都有一个对应的 Project 实例,对 build.gradle 文件配置,本质就是设置 Project 实例的属性和方法。
  • 由于每个 project 都会有一个 build 文件,那么 Root Project 也不列外.Root Project 可以获取到所有 Child Project,所以在 Root Project 的 build 文件中我们可以对 Child Project 统一配置,比如应用的插件、依赖的 maven 中心仓库等。
  • build 文件中常见的属性和方法如下所示:

Gradle build.gradle 文件_spring

1、常见属性代码

//指定使用什么版本的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"
}

提示 1:group+name+version 类似于 maven 的 group+artifactId+version
提示 2:encoding 解决业务代码与测试代码中文乱码问题

2、Repositories

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()
}

因为 Gradle 没有自己的远程仓库,而是使用 Maven、jcenter、jvy、google 这些远程仓库。

3. Subprojects 与 Allprojects

allprojects 是对所有 project(包括 Root Project+ child Project[当前工程和所有子工程])的进行统一配置,而 subprojects 是对所有 Child Project 的进行统一配置。

allprojects { 
tasks.create('hello') {
doLast {
task ->println "project name is $task.project.name"
}
}
}
subprojects {
hello.doLast{
task-> println "here is subprojects $task.project.name"
}
}

通常在 subprojects 和 allprojects 中:

allprojects(){ //本质Project中的allprojects方法,传递一个闭包作为参数。 
apply plugin: 'java'
ext {
junitVersion = '4.10'
..
}
task allTask{
...
}
repositories {
...
}
dependencies {
...
}
}
subprojects(){
…//同上面allprojects中的方法。
}

1: 如果是直接在 根 project 配置 repositories 和 dependencies 则 只针对根工程有效。
2: 我们也可以在对单个 Project 进行单独配置:

project('subject01') { 
task subject01 {
doLast {
println 'for subject01'
}
}
}

执行 gradle build 指令即可查看测试效果。

4、ext 用户自定义属性

Project 和 Task 都允许用户添加额外的自定义属性,要添加额外的属性,通过应用所属对象的 ext 属性即可实现。添加 之后可以通过 ext 属性对自定义属性读取和设置,如果要同时添加多个自定义属性,可以通过 ext 代码块:

//自定义一个Project的属性 
ext.age = 18
//通过代码块同时自定义多个属性
ext {
phone = 19292883833
address="北京"
}
task extCustomProperty {
//在task中自定义属性
ext {
desc = "奥利给"
}
doLast {
println "年龄是:${age}"
println "电话是:${phone}"
println "地址是:${address}"
println "口号:${desc}"
}
}

测试:通过 ​​gradle extCustomProperty​​ 输出结果为:

年龄是:18
电话是:19292883833
地址是:北京
口号:奥利给

ext 配置的是用户自定义属性,而 gradle.properties 中一般定义 系统属性、环境变量、项目属性、JVM 相关配置 信息。例如 ​​gradle.properties​​​ 文件案例:加快构建速度的,​​gradle.properties​​ 文件中的属性会自动在项目运行时加载。

## 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出 
org.gradle.jvmargs=-Xms4096m -Xmx8192m
## 开启gradle缓存
org.gradle.caching=true
#开启并行编译
org.gradle.parallel=true
#启用新的孵化模式
org.gradle.configureondemand=true
#开启守护进程
org.gradle.daemon=true

5、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. 2.对于多项目构建,项目的 buildscript ()方法声明的依赖关系可用于其所有子项目的构建脚本。
  3. 构建脚本依赖可能是 Gradle 插件。

如下所示:

//老式apply插件的引用方式,使用apply+buildscript 
buildscript {
ext {
springBootVersion = "2.3.3.RELEASE"
}
repositories {
mavenLocal()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
jcenter()
}
//此处引入插件
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java' //核心插件,无需事先引入
apply plugin: 'org.springframework.boot' //社区插件,需要事先引入,才能应用,不必写版本号
asspath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java' //核心插件,无需事先引入
apply plugin: 'org.springframework.boot' //社区插件,需要事先引入,才能应用,不必写版本号


标签:Project,插件,Gradle,maven,build,org,gradle,属性
From: https://blog.51cto.com/u_14452299/6019801

相关文章

  • VSCode debug gradle multiple-project 项目
    项目分层(阿里巴巴Java开发手册推荐)Gradle项目在APPproject的build.gradle中配置依赖其他project,执行task会输出到build文件夹默认debug的时候会创建launch.json{......
  • ERROR: Failed to build gem native extension on Windows
    install rubydevelopmentkit. 如果这个solution解决不了可以参照链接里的其他答案,我是采用上面的方式解决的https://stackoverflow.com/questions/42746055/error-f......
  • Sealer 0.9 :帮助集群和分布式应用实现 Build、 Share、Run
    作者:sealer社区新春之际,很高兴在此时宣布 Sealer[1]0.9版本的正式发布。Sealer是一款致力于探索面向分布式应用的快速打包、交付和运行的解决方案。2021年5月Sea......
  • HBuilderX中 .vue解析
    1.<template>ui设计所有的有关界面的都写在这个里面2.<view>子标签,写在template中,view之间可以嵌套3.<script>js业务代码所有有关业务代码的都写在这个里面4.expoe......
  • 【转】Java项目构建工具Gradle是否可以完全替代Maven?
    前言在Java项目的开发中,需要引入自动化构建工具来帮助我们管理项目的外部依赖包、项目编译、打包等工作。Gradle和Maven是Java世界中两个重要的自动化构建工具,在项目中我们......
  • [ROC-RK3568-PC] 手把手教你编译Linux_SDK并打包Buildroot系统固件
    ✏️ROC-RK3568-PC入门篇连载进程:✅​​[ROC-RK3568-PC]手把手教你把出厂的Android系统烧写为Ubuntu系统​​✅​​​[ROC-RK3568-PC]手把手教你制作Ubuntu系统TF卡启动......
  • laravel 写function builder where 条件
    if(isset($data['txnTimeStart'])&&!empty($data['txnTimeStart'])){//['r.txnTime','>=',$data['txnTimeStart']];$where[]=[function(......
  • StringBuilder类
    StringBuilder类/*StringBuilder是一个可变的字符串类,我们可以把它看作一个容器,可变是指它对象中的内容是可变的.String中的内容是不可变的.StringBuilder中的......
  • 使用StringBuilder拼接字符串
    使用StringBuilder拼接字符串/*StringBuilder比String来拼接字符串效率高!@#$需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在......
  • 使用StringBuilder反转字符串
    使用StringBuilder反转字符串importjava.util.Scanner;/*需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果例如,键盘录入abc,输出结......