Skip to content

Gradle

概述

Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建开源工具。它使用一种基于 Groovy 的特定领域语言(DSL)来声明项目设置,而不是传统的 XML,使得构建脚本更加简单易懂,通知gradle也支持基于Kotlin语言的Kotlin DSL,提供了更多选择。

gradle优势

灵活性: Gradle允许你使用任何你喜欢的构建脚本语言,并提供强大的自定义任务类型功能。 性能:Gradle出色的构建性能,尤其对大型项目,它支持构建缓存,守护进程和并行执行,可以显著提高构建速度。 依赖管理:Gradle提供强大的依赖管理功能,可以自动处理依赖项的下载、版本控制和冲突解决。 多项目支持:Gradle支持多项目构建,你可以定义多个项目,并在它们之间共享配置和依赖项。 插件系统:Gradle拥有庞大的插件生态系统,涵盖了各种构建任务和工具。 社区支持:Gradle拥有庞大的社区支持,有大量的文档、教程和插件可供使用。

gradle安装

安装工具

多版本管理需要可以使用sdkman https://sdkman.io/sdks 亲测java,maven环境管理使用sdkman相当舒适

gradle镜像

国内镜像可以使用腾讯云:https://mirrors.cloud.tencent.com/gradle/

新建项目

使用spring initializr新建项目 目录结构:

txt
.
├── HELP.md
├── build.gradle.kts
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle.kts
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── gradledemo
    │   │               └── GradleDemoApplication.java
    │   └── resources
    │       ├── application.properties
    │       ├── static
    │       └── templates
    └── test
        └── java
            └── com
                └── example
                    └── gradledemo
                        └── GradleDemoApplicationTests.java

目录文件说明

txt
src: 源代码目录  
-- main: 主目录  
-- -- java: Java 源代码目录  
-- -- resources: 资源目录  
--test: 测试代码目录  
gradle: Gradle 构建目录  
-- wrapper: Gradle 包装器目录  
-- -- gradle-wrapper.jar: Gradle 包装器 JAR 文件  
-- -- gradle-wrapper.properties: Gradle 包装器配置文件  
build.gradle.kts 使用kotlin DSL编写的构建脚本,包括依赖、仓库、插件等  
settings.gradle.kts 使用kotlin DSL编写的全局设置脚本  
gradlew: Unix 系统下的 Gradle 包装器脚本  
gradlew.bat: Windows 系统下的 Gradle 包装器脚本

配置文件说明

build.gradle.kts

kotlin
// 插件声明,用于指定项目构建所需要的插件
plugins {
    //gradle内部的java插件,支持构建java项目
    java
    //使用springboot插件,并且指定版本,支持springboot项目构建
    id("org.springframework.boot") version "3.4.5"
    //使用spring依赖管理插件,指定版本,管理spring项目依赖关系
    id("io.spring.dependency-management") version "1.1.7"
    //引入maven-publish插件
    id("maven-publish")
}

//配置发布插件
publishing {
    //定义发布的内容
    publications {
        //创建具体发布内容
        create<MavenPublication>("Publish") {
            //设置groupId
            groupId = project.group.toString()
            //设置artifactId
            artifactId = "gradle-demo"
            //设置发布内容版本
            version = project.version.toString()
            //从java组件/库中获取发布内容
            from(components["java"])

        }
    }
}

//项目组id,同maven组id
group = "com.example"

version = "0.0.1-SNAPSHOT"

//设置java配置
java {
    toolchain {
        //设置java21
        languageVersion = JavaLanguageVersion.of(21)
    }
}
/**
 *
 * 让 compileOnly 配置继承 annotationProcessor配置中的所有依赖,
 * 这样,添加到 compileOnly 中的任何库也将被视为注解处理器,
 * 但仅在编译时使用不会在运行时包含在内。
 */

configurations {
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}
//指定仓库
repositories {
    mavenCentral()
}
// !!代表强制使用该依赖,不写默认使用高版本
dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.belerweb:pinyin4j: 2.5.1!!") {
        //排除内部依赖 ,在运行和和编译是
//        exclude("com.xxx")
    }


    /*扫描Lib目录下所有jar,并增加到依赖中*/
    implementation(fileTree("lib"))

    //仅在编译时使用,类似maven  scope  provided
    compileOnly("org.projectlombok:lombok")

    /**
        你在类上使用Lombok提供的注解(如@Getter、@Setter等)时,
        Lombok的注解处理器会自动为你的类生成getter和setter方法,这样你就不需要手动编写这些方法了。
        为了让Gradle知道在编译时要调用Lombok的注解处理器你就需要在Gradle构建脚本中添加Lombok作为annotationProcessor的依赖。
     **/
    annotationProcessor("org.projectlombok:lombok")

    /**
        测试时包括,类似maven下面配置
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
     */

    testImplementation("org.springframework.boot:spring-boot-starter-test")

    //测试运行时包含
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")

    /**
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>8.0.33</scope>
    </dependency>
     */
    runtimeOnly("mysql:mysql-connector-java:8.8.33")


}

//任务配置块,针对特定类型的任务进行配置
tasks.withType<Test> {
    //使用JUnit Platform来进行测试,这是JUnit5推荐的方式
    useJUnitPlatform()
}