Gradle概述、语法说明

Gradle是一种开源的自动化构建工具,它使用Groovy编程语言和Kotlin编程语言来编写构建脚本。Gradle结合了Apache Maven的依赖管理和Apache Ant的灵活性和控制。它是Android的官方构建工具,并且被许多Java项目用于构建、测试、发布和其他任务。

Gradle的核心概念

Projects 和 Tasks

在Gradle中,所有的构建都是由一个或多个projects组成的,每个project都是由一个或多个tasks组成的。一个task代表一个构建任务,比如编译源代码、打包jar文件、生成javadoc等。

Build Scripts

Gradle构建脚本是用Groovy或Kotlin编写的,通常命名为build.gradle(Groovy)或build.gradle.kts(Kotlin)。这些脚本定义了项目的构建配置,包括项目的依赖、版本、任务等。

Dependencies

Gradle通过配置依赖项来自动下载和缓存所需的库。它支持多种依赖仓库,包括Maven Central、JCenter和私有仓库。

Plugins

Gradle插件可以扩展Gradle的功能,提供预定义的任务和配置。例如,Spring Boot插件提供了构建Spring Boot应用程序的任务。

Configuration Files

除了构建脚本,Gradle还使用其他配置文件,如settings.gradle(或settings.gradle.kts),用于定义项目中包含的模块。

Gradle Wrapper

Gradle Wrapper允许在没有安装Gradle的情况下运行Gradle构建。它是一个脚本和库,随项目一起分发,确保了构建的一致性。

Gradle的生命周期

Gradle构建的生命周期分为三个阶段:

  1. 初始化阶段:Gradle确定哪些项目将参与构建,并为每个项目创建一个Project实例。
  2. 配置阶段:Gradle配置项目,执行构建脚本中的代码,构建项目的依赖关系图,并准备执行任务。
  3. 执行阶段:Gradle执行指定的任务和其他依赖任务。

Gradle的命令行界面

Gradle提供了丰富的命令行界面,可以使用命令行来执行任务、查看项目信息和诊断问题。常见的Gradle命令包括:

  • gradle build:构建项目。
  • gradle clean:清理项目构建的输出。
  • gradle tasks:列出项目中可用的任务。
  • gradle help --task <task>:查看特定任务的详细信息。

Gradle vs. Maven

Gradle和Maven都是用于Java项目的构建工具,但它们有一些关键的区别:

  • 灵活性:Gradle提供了更多的灵活性和控制,因为它是基于Groovy和Kotlin的,而Maven则使用XML配置。
  • 性能:Gradle通过增量构建和缓存机制提供了更快的构建速度。
  • 依赖管理:两者都支持依赖管理,但Gradle提供了更丰富的依赖配置选项。
Gradle优缺点

Gradle的优点包括:

  1. 高度灵活:Gradle提供了高度灵活的构建脚本,可以轻松地自定义构建过程。
  2. 强大的依赖管理:Gradle具有强大的依赖管理功能,可以自动解决依赖关系,并下载所需的库。
  3. 快速的构建速度:Gradle通过增量构建和缓存机制,可以显著提高构建速度。
  4. 易于扩展:Gradle可以通过插件进行扩展,支持多种语言和框架。
  5. 社区支持:Gradle有一个庞大的社区,提供了大量的文档和插件。
    Gradle的缺点包括:
  6. 学习曲线较陡峭:对于初学者来说,Gradle的学习曲线较陡峭,需要花费一定的时间和精力来掌握。
  7. 配置复杂:Gradle的配置相对复杂,需要编写大量的Groovy或Kotlin代码。
  8. 兼容性问题:由于Gradle的版本更新频繁,可能会出现兼容性问题。
    与Java相比,Gradle是一种构建工具,而Java是一种编程语言。Gradle主要用于自动化构建和依赖管理,而Java主要用于开发各种应用程序。Gradle可以用于构建Java项目,也可以用于构建其他语言的项目,如Android、Groovy、Scala等。Java则是一种通用的编程语言,可以用于开发各种类型的应用程序,如Web应用程序、桌面应用程序、移动应用程序等。

Java中gradle配置文件说明

在Java项目中使用Gradle时,通常会涉及到几个关键的Gradle文件。这些文件定义了项目的构建配置和生命周期。下面是这些文件的说明:

  1. build.gradlebuild.gradle.kts:
    • 这是项目的核心构建脚本,用于配置项目的依赖、版本、任务等。
    • 使用Groovy或Kotlin编写,取决于项目采用的是哪种语言。
    • 定义了项目的依赖项、插件、版本、任务和自定义配置。
  2. settings.gradlesettings.gradle.kts:
    • 这是项目全局设置文件,通常位于项目的根目录中。
    • 用于定义项目中包含的模块(子项目)。
    • 可以包含一些全局配置,例如项目名称和插件管理。
  3. gradle.properties:
    • 这是一个属性文件,用于定义Gradle构建时的全局属性。
    • 可以用来设置项目范围的属性,如项目版本、构建使用的JVM参数等。
  4. gradle-wrapper.properties:
    • 这是Gradle Wrapper的配置文件,位于gradle/wrapper目录下。
    • 定义了Gradle Wrapper使用的Gradle版本和下载位置。
    • 使用Gradle Wrapper可以在没有安装Gradle的情况下运行Gradle构建,确保了构建环境的一致性。
  5. gradlewgradlew.bat:
    • 这些是Gradle Wrapper的可执行脚本,用于在Unix和Windows系统上启动Gradle构建。
    • gradlew是用于Unix-like系统的脚本,gradlew.bat是用于Windows系统的批处理文件。
  6. README.md:
    • 虽然这不是Gradle特定的文件,但它是一个很好的实践,用于提供项目的简要说明、如何构建项目和如何运行项目。

Gradle相关配置文件说明

build.gradle 示例:

plugins {id 'java'id 'org.springframework.boot' version '2.7.0'
}
repositories {mavenCentral()
}
dependencies {implementation 'org.springframework.boot:spring-boot-starter-web:2.7.0'testImplementation 'org.springframework.boot:spring-boot-starter-test:2.7.0'
}
jar {manifest {attributes 'Main-Class': 'com.example.MainClass'}
}

settings.gradle 示例:

rootProject.name = 'my-java-project'
include 'sub-project-1', 'sub-project-2'

gradle.properties 示例:

# Project-wide Gradle settings
org.gradle.jvmargs=-Xmx4608M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# Gradle metadata
org.gradle.wrapper.useGradleUserHomeForStorage=true

gradle-wrapper.properties 示例:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

Gradle相关配置文件中代码语法说明

插件声明
plugins {id 'java'id 'org.springframework.boot' version '2.7.0'id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}
  • plugins { ... }:这是一个在Gradle中声明插件的块。在这里,可以指定项目使用的插件及其版本。
  • id 'java':应用Java插件,它添加了编译和测试Java源代码的能力。
  • id 'org.springframework.boot' version '2.7.0':应用Spring Boot插件,它提供了Spring Boot项目的支持,并添加了额外的任务,如bootJar
  • version:指定插件的版本。如果省略,Gradle将使用最新版本。
依赖配置
dependencies {implementation 'org.springframework.boot:spring-boot-starter-web:2.7.0'testImplementation 'org.springframework.boot:spring-boot-starter-test:2.7.0'
}
  • dependencies { ... }:这是一个配置项目依赖的块。
  • implementation:用于添加编译和运行时都需要的依赖。
  • testImplementation:用于添加测试编译时需要的依赖。
  • org.springframework.boot:spring-boot-starter-web:2.7.0:这是一个依赖项的声明,包括组ID、工件ID和版本。
任务配置
task myTask(type: JavaCompile) {source = 'src/main/java'classpath = sourceSets.main.runtimeClasspath
}
  • task myTask(type: JavaCompile) { ... }:定义一个新任务myTask,类型为JavaCompile
  • source:设置源代码目录。
  • classpath:设置编译时使用的类路径。
属性配置
ext {set('myProperty', 'myValue')
}
  • ext { ... }:这是一个扩展属性块,用于定义项目级别的额外属性。例如java中的properties模块定义依赖的版本
  • set('myProperty', 'myValue'):定义一个名为myProperty的属性,值为myValue
自定义任务
task customTask(type: Copy) {from 'src/main/resources'into 'build/resources/main'
}
  • task customTask(type: Copy) { ... }:定义一个新任务customTask,类型为Copy
  • from:指定要复制的源目录或文件。
  • into:指定目标目录。
多项目构建
subprojects {apply plugin: 'java'repositories {mavenCentral()}dependencies {implementation 'commons-lang:commons-lang:2.6'}
}
  • subprojects { ... }:这是一个为所有子项目配置通用设置的块。
  • apply plugin: 'java':为每个子项目应用Java插件。
  • repositoriesdependencies:为每个子项目配置依赖仓库和依赖项。
使用Gradle Wrapper

Gradle Wrapper是一个脚本和库,它允许在没有预先安装Gradle的情况下运行Gradle构建。它的主要目的是为了确保项目构建的一致性,因为每个项目都可以附带其所需版本的Gradle Wrapper。这样,无论在什么环境下,无论是开发者机器、CI/CD服务器还是其他任何地方,都可以保证使用相同版本的Gradle来构建项目,从而减少了由于Gradle版本差异导致的问题。
Gradle Wrapper包括以下几个部分:

  1. gradlewgradlew.bat 脚本:
    • gradlew 是用于Unix-like系统的Shell脚本。
    • gradlew.bat 是用于Windows系统的批处理脚本。
    • 这些脚本负责启动Gradle构建,并确保使用正确的Gradle版本。
  2. gradle/wrapper/gradle-wrapper.jar
    • 这是一个Java库,包含了Gradle Wrapper的逻辑。
    • 它由gradlew脚本使用来下载和运行Gradle发行版。
  3. gradle/wrapper/gradle-wrapper.properties
    • 这是一个属性文件,用于配置Gradle Wrapper的行为。
    • 它指定了要使用的Gradle版本、下载URL以及其他配置选项。
      使用Gradle Wrapper的好处包括:
  • 易于安装:新加入项目的开发者不需要安装Gradle,只需使用项目自带的Wrapper。
  • 版本控制:Gradle版本作为项目的一部分进行版本控制,确保了所有团队成员和构建服务器使用相同的Gradle版本。
  • 性能优势:Gradle Wrapper可以缓存下载的Gradle发行版,因此不需要每次构建都重新下载。
  • 灵活性:可以在不同的项目中使用不同版本的Gradle,而不会相互影响。

要为项目添加Gradle Wrapper,可以在项目根目录下运行以下命令:

gradle wrapper

这将生成上述提到的Wrapper脚本和配置文件。然后,可以通过执行./gradlew(在Unix-like系统上)或gradlew.bat(在Windows系统上)来运行Gradle构建,而不是直接运行gradle命令。

wrapper {gradleVersion = '7.3.3'distributionType = Wrapper.DistributionType.ALL
}
  • wrapper { ... }:配置Gradle Wrapper的块。
  • gradleVersion:指定Wrapper使用的Gradle版本。
  • distributionType:指定Wrapper下载的Gradle发行版类型,可以是BIN(二进制)或ALL(包括源代码和文档)。
    这些语法说明提供了Gradle构建脚本中常见元素的基础知识。Gradle的灵活性允许根据项目的需求进行详细的配置和自定义。在实际项目中,可能需要根据具体情况调整和扩展这些基本的构建元素。

Gradle管理spingcloud代码示例

以下是一个基于Gradle的Spring Cloud订单项目的架构配置示例,包括父项目parent-service和两个子项目user-serviceorder-service

父项目parent-servicebuild.gradle
//gradle
buildscript {repositories {mavenCentral()}dependencies {classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.7.0'}
}
//所有项目统一配置
allprojects {group 'com.example'version '1.0-SNAPSHOT'repositories {mavenCentral()}
}
//统一版本依赖
ext {springBootVersion = '2.7.0'springCloudVersion = 'Hoxton.SR11'mybatisVersion = '2.2.0'nacosVersion = '2021.1'
}
//子项目管理配置
subprojects {apply plugin: 'java'apply plugin: 'org.springframework.boot'apply plugin: 'io.spring.dependency-management'sourceCompatibility = '1.8'targetCompatibility = '1.8'dependencies {implementation "org.springframework.boot:spring-boot-starter-web:${springBootVersion}"implementation "org.mybatis.spring.boot:mybatis-spring-boot-starter:${mybatisVersion}"implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:${nacosVersion}"runtimeOnly 'mysql:mysql-connector-java'testImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}"}bootJar {baseName = project.nameversion = project.version}
}
// 子项目配置
project(':user-service') {dependencies {// user-service特定的依赖可以在这里添加,例如common包}
}
project(':order-service') {dependencies {// order-service特定的依赖可以在这里添加}
}
子项目user-servicebuild.gradle
// 应用父项目的配置
apply from: '../parent-service/build.gradle'
// 如果有特定于user-service的依赖,可以在这里添加
dependencies {// 例如,添加user-service特有的依赖,例如mysql驱动}
子项目order-servicebuild.gradle
// 应用父项目的配置
apply from: '../parent-service/build.gradle'
// 如果有特定于order-service的依赖,可以在这里添加
dependencies {// 例如,添加order-service特有的依赖
}
语法说明
  • buildscript { ... }:这是配置Gradle脚本自身使用的仓库和依赖的块。在这里,它配置了使用Maven Central作为仓库,并且依赖于Spring Boot的Gradle插件。
  • allprojects { ... }:为所有项目(包括子项目和根项目)设置一些共同的配置。这里定义了项目的组和版本,并指定了Maven Central作为依赖仓库。
  • ext { ... }:使用ext块定义统一的依赖版本。这有助于在多个项目中保持依赖版本的一致性。
  • subprojects { ... }:为所有子项目设置一些共同的配置。这里应用了Java、Spring Boot和Spring Dependency Management插件,并设置了Java编译的目标版本和源版本。还定义了一些共同的依赖,比如Spring Web Starter、MyBatis Starter、Nacos Discovery Starter、MySQL驱动和Spring Boot Test。
  • project(':user-service') { ... }project(':order-service') { ... }:这些块用于为特定的子项目添加额外的配置,可以在这里添加特定于子项目的依赖或配置。

总结

Gradle是一个基于Groovy的自动化构建工具,广泛用于Java和Kotlin项目的构建。它提供了一种灵活的配置方式,支持多种语言和平台。以下是基于上述内容对Gradle的总结:

  1. 构建脚本
    • build.gradle:定义项目的构建配置,包括依赖、任务和插件。
    • settings.gradle:定义项目中包含的模块。
    • gradle.properties:设置项目构建时的全局属性。
  2. 依赖管理
    • 通过dependencies块,可以轻松地管理项目的依赖。
    • 使用ext块可以统一依赖版本,保持项目间的一致性。
    • dependencyManagement可以管理依赖版本,避免版本冲突。
  3. 插件和任务
    • plugins { ... }:声明项目使用的插件和版本。
    • tasks { ... }:定义项目的构建任务。
  4. 多项目构建
    • allprojects { ... }:为所有项目设置通用配置。
    • subprojects { ... }:为子项目设置通用配置。
  5. Gradle Wrapper
    • 确保项目在不同环境下使用相同的Gradle版本。
    • 无需安装Gradle即可运行项目。
  6. 构建生命周期
    • gradle build:构建项目。
    • gradle clean:清理项目构建的输出。
    • gradle tasks:列出项目中可用的任务。
      Gradle通过其强大的配置能力和灵活性,为Java项目提供了高效的构建和自动化解决方案。通过使用Gradle,开发者可以轻松地管理复杂的构建逻辑,并确保项目的质量和一致性。

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

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

相关文章

Rust 实现线程安全的 Lock Free 计数器

完整代码&#xff1a;https://github.com/chiehw/hello_rust/blob/main/crates/counter/src/lib.rs 定义 Trait Trait 可以看作是一种能力的抽象&#xff0c;和接口有点类似。Trait 还能作为泛型约束条件&#xff0c;作为参数的限制条件。 pub trait AtomicCounter: Send S…

Linux 特殊文件属性命令chattr和lsattr

特殊文件属性命令 chattr 和 lsattr chattr 和 lsattr 是有关数据安全的命令&#xff1a; 1&#xff09;chattr作用及语法 a.命令作用&#xff1a; 给 文件或目录 加锁&#xff0c;不让别人修改和删除 b.命令语法&#xff1a; chattr 选项 文件 c.选项属性&#xff1a…

CDN加速原理那些事

名词解释 CNAME记录&#xff08;CNAME record&#xff09; CNAME即别名( Canonical Name )&#xff1b;可以用来把一个域名解析到另一个域名&#xff0c;当 DNS 系统在查询 CNAME 左面的名称的时候&#xff0c;都会转向 CNAME 右面的名称再进行查询&#xff0c;一直追踪到最后…

初探 Spring Boot 源码:揭秘其高效魔法

Spring Boot 作为当今 Java 世界中最受欢迎的框架之一&#xff0c;以其简化配置和快速部署的能力赢得了开发者的广泛赞誉。但是&#xff0c;你是否曾经好奇过&#xff0c;是什么让 Spring Boot 如此高效和强大&#xff1f;本文将带你深入 Spring Boot 的源码&#xff0c;揭示其…

js str字符串和arr数组互相转换

js str字符串和arr数组互相转换 字符串转为数组 1、split()方法 返回的是原字符串的数组 var str "hello"; var arr str.split(""); console.log(arr); //输出["h", "e", "l", "l", "o"]2、Ar…

创建型模式--4.抽象工厂模式【弗兰奇一家】

1. 奔向大海 在海贼世界中&#xff0c;位于水之都的弗兰奇一家是由铁人弗兰奇所领导的以拆船为职业的家族&#xff0c;当然了他们的逆向工程做的也很好&#xff0c;会拆船必然会造船。船是海贼们出海所必备的海上交通工具&#xff0c;它由很多的零件组成&#xff0c;从宏观上看…

算法:完全背包问题dp

文章目录 一、完全背包问题的特征二、定义状态三、状态转移四、降维优化五、参考例题5.1、Acwing&#xff1a;3.完全背包问题5.2、Acwing&#xff1a;900. 整数划分 一、完全背包问题的特征 完全背包问题是动态规划中的一种经典问题&#xff0c;它的主要特征可以总结如下&…

LeetCode热题Hot100 - 删除链表的倒数第N个结点

一刷~ 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 思路&#xff1a; 用两个指针&#xff0c;第一个指针先往前走n步&#xff08;注意起始点不是head&#xff09;&#xff0c;然后第二个指针和第一个指针一起移动&#xff0c;当第一…

[HackMyVM]靶场Flossy

难度:Medium kali:192.168.56.104 靶机:192.168.56.142 端口扫描 ┌──(root㉿kali2)-[~/Desktop] └─# nmap 192.168.56.142 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-01 21:01 CST Nmap scan report for 192.168.56.142 Host is up (0.00018s latency).…

浏览器的几种存储方式

浏览器的几种存储方式&#xff08;图表形式&#xff09; 存储方式特点应用场景示例有效期容量是否共享安全性Cookie存储少量数据&#xff0c;例如用户偏好、登录状态等用户认证、个性化设置登录状态、语言偏好会话或永久4KB同源中等Local Storage️永久存储数据&#xff0c;同…

从0开始搭建基于VUE的前端项目(四) Vue-Router的使用与配置

版本 vue-router 3.6.5 (https://v3.router.vuejs.org/zh/) 安装 安装要指定版本&#xff0c;默认安装的4版本的 npm install vue-router3.6.5代码实现 在src目录下创建router目录 router/index.js import Vue from vue import Router from vue-routerVue.use(Router)con…

Nginx入门 -- 解析Nginx中的基本概念:Keepalive

引言&#xff1a; Nginx是一款流行的开源Web服务器软件&#xff0c;被广泛用于构建高性能的Web服务器和反向代理。在Nginx中&#xff0c;Keepalive是一个基本概念&#xff0c;它在网络连接中起到重要的作用。本文将深入探讨Keepalive的工作原理和在Nginx中的应用。 1.Keepaliv…

A5 STM32_HAL库函数 之 CAN通用驱动程序所有函数的介绍及使用

A5 STM32_HAL库函数 之 CAN通用驱动程序所有函数的介绍及使用 1 CAN通用驱动程序所有函数预览1.1 HAL_CAN_Init1.2 HAL_CAN_ConfigFilter1.3 HAL_CAN_DeInit1.4 HAL_CAN_MspInit1.5 HAL_CAN_MspDeInit1.6 HAL_CAN_Transmit1.7 HAL_CAN_Transmit_IT1.8 HAL_CAN_Receive1.9 HAL_C…

fssh挂载远程服务器目录

fssh挂载远程服务器目录 1、服务器自动登录 1.1 生成SSH 密钥对 ssh-keygen -t rsa这个命令会生成一个私钥(默认保存在 ~/.ssh/id_rsa)和一个公钥(默认保存在 ~/.ssh/id_rsa.pub)。 你可以通过 -f 参数指定一个不同的文件名和路径来保存这些密钥。 会要求输入名称和密码…

聊聊Linux内核中内存模型

介绍 在Linux中二进制的程序从磁盘加载到内存&#xff0c;运行起来后用户态是使用pid来唯一标识进程&#xff0c;对于内核都是以task_struct表示。二进制程序中的数据段、代码段、堆都能提现在task_struct中。每一个进程都有自己的虚拟地址空间&#xff0c;虚拟地址空间包含几…

【2024】Prometheus通过node_exporter都监控了什么

我们通过prometheus进行监控,通过node_exporter进行Linux系统的监控。 那么我们通过node_exporter都监控了什么? 目录 常用指标CPU相关内存相关磁盘相关网络相关其他指标常用监控告警案例:cpu案例:内存案例:磁盘案例:网络案例:常用指标 Prometheus通过node_exporter可以…

交换机虚拟化技术

1、思科虚拟化技术&#xff1a; &#xff08;1&#xff09;stackwise&#xff1a;堆叠&#xff0c;一般用于盒式交换机的场景 ①原理&#xff1a;可以将多台物理设备逻辑的虚拟成一台大的设备 ②冗余交换机管理引擎&#xff1a; 三种模式&#xff1a; 1&#xff09;RPR&am…

stack和queue的使用

前言 前面我们对string、vector、list做了介绍并对底层进行了实现&#xff01;本期我们继续来介绍STL容器&#xff0c;stack和queue&#xff01; 本期内容介绍 stack 常用接口的介绍 queue 常用接口的介绍 什么是stack? 这里的栈和我们C语言实现的数据结构的那个栈功能是一样…

向上向下采样

在数字图像处理中&#xff0c;向上采样&#xff08;upsampling&#xff09;和向下采样&#xff08;downsampling&#xff09;是两种常见的操作&#xff0c;用于改变图像的分辨率。 向上采样&#xff08;Upsampling&#xff09;&#xff1a; 向上采样是指增加图像的分辨率&…

leetcode代码记录(最长连续递增序列

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定…