Gradle build.gradle 文件

梦里梦外; 2023-09-28 05:18 71阅读 0赞
  • 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 文件中常见的属性和方法如下所示:

在这里插入图片描述

1、常见属性代码

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

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

2、Repositories

  1. repositories {
  2. //gradle中会按着仓库配置的顺序,从上往下依次去对应的仓库中找所需要的jar包:
  3. //如果找到,则停止向下搜索,如果找不到,继续在下面的仓库中查找
  4. //指定去本地某个磁盘目录中查找:使用本地file文件协议:一般不用这种方式 maven { url 'file:///D:/repos/mavenrepos3.5.4'}
  5. maven {
  6. url "$rootDir/lib/release" }
  7. //指定去maven的本地仓库查找
  8. mavenLocal()
  9. //指定去maven的私服或者第三方镜像仓库查找
  10. maven {
  11. name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
  12. maven {
  13. name "Bstek" ; url "https://nexus.bsdn.org/content/groups/public/" }
  14. //指定去maven的远程仓库查找:即 https://repo.maven.apache.org/maven2/
  15. mavenCentral()
  16. //去google仓库查找
  17. google()
  18. }

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

3. Subprojects 与 Allprojects

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

  1. allprojects {
  2. tasks.create('hello') {
  3. doLast {
  4. task ->println "project name is $task.project.name"
  5. }
  6. }
  7. }
  8. subprojects {
  9. hello.doLast{
  10. task-> println "here is subprojects $task.project.name"
  11. }
  12. }

通常在 subprojects 和 allprojects 中:

  1. allprojects(){
  2. //本质Project中的allprojects方法,传递一个闭包作为参数。
  3. apply plugin: 'java'
  4. ext {
  5. junitVersion = '4.10'
  6. ..
  7. }
  8. task allTask{
  9. ...
  10. }
  11. repositories {
  12. ...
  13. }
  14. dependencies {
  15. ...
  16. }
  17. }
  18. subprojects(){
  19. //同上面allprojects中的方法。
  20. }

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

  1. project('subject01') {
  2. task subject01 {
  3. doLast {
  4. println 'for subject01'
  5. }
  6. }
  7. }

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

4、ext 用户自定义属性

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

  1. //自定义一个Project的属性
  2. ext.age = 18
  3. //通过代码块同时自定义多个属性
  4. ext {
  5. phone = 19292883833
  6. address="北京"
  7. }
  8. task extCustomProperty {
  9. //在task中自定义属性
  10. ext {
  11. desc = "奥利给"
  12. }
  13. doLast {
  14. println "年龄是:${age}"
  15. println "电话是:${phone}"
  16. println "地址是:${address}"
  17. println "口号:${desc}"
  18. }
  19. }

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

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

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

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

5、Buildscript

buildscript 里是 gradle 脚本执行所需依赖,分别是对应的 maven 库和插件。

  1. import org.apache.commons.codec.binary.Base64
  2. buildscript {
  3. repositories {
  4. mavenCentral()
  5. }
  6. dependencies {
  7. classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
  8. }
  9. }
  10. tasks.register('encode') {
  11. doLast {
  12. def byte[] encodedString = new Base64().encode('hello world\n'.getBytes())
  13. println new String(encodedString)
  14. }
  15. }

需要注意的是:

  1. buildscript{}必须在 build.gradle 文件的最前端。
  2. 2.对于多项目构建,项目的 buildscript ()方法声明的依赖关系可用于其所有子项目的构建脚本。
  3. 构建脚本依赖可能是 Gradle 插件。

如下所示:

  1. //老式apply插件的引用方式,使用apply+buildscript
  2. buildscript {
  3. ext {
  4. springBootVersion = "2.3.3.RELEASE"
  5. }
  6. repositories {
  7. mavenLocal()
  8. maven {
  9. url 'http://maven.aliyun.com/nexus/content/groups/public' }
  10. jcenter()
  11. }
  12. //此处引入插件
  13. dependencies {
  14. classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
  15. }
  16. }
  17. apply plugin: 'java' //核心插件,无需事先引入
  18. apply plugin: 'org.springframework.boot' //社区插件,需要事先引入,才能应用,不必写版本号
  19. asspath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
  20. }
  21. }
  22. apply plugin: 'java' //核心插件,无需事先引入
  23. apply plugin: 'org.springframework.boot' //社区插件,需要事先引入,才能应用,不必写版本号

发表评论

表情:
评论列表 (有 0 条评论,71人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Gradle 操纵文件

    CopyTask 将文件从一个目录拷贝到另一个目录,也可以拷贝副本。 全部拷贝到另外一个目录 Example 1-1. A trivial copy

    相关 build.gradle文件详解

     Gradle是一种依赖管理工具,基于Froovy语言,面向Java应用为主,它抛弃了基于xml的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语