Gradle语法

Gradle 使用一种基于 Groovy(或 Kotlin)的领域特定语言(DSL)来编写构建脚本。以下是 Gradle 语法的一些关键特性及示例:

1. 构建脚本文件结构

Gradle 的构建脚本通常位于项目根目录下的 build.gradle(或 build.gradle.kts 如果使用 Kotlin DSL)文件中。对于多项目构建,每个子项目可以有自己的 build.gradle 文件,而在根目录下有一个总的 settings.gradle(或 settings.gradle.kts)文件来定义项目结构。

2. 基本构建块: 项目(Project)与任务(Task)

  • 项目:Gradle 以项目作为组织构建的基本单位。每个项目由一个 project 对象表示,包含一组任务、依赖、配置等信息。
 

groovy

// build.gradle
apply plugin: 'java' // 应用 Java 插件

group = 'com.example'
version = '1.0.0'

repositories {
    mavenCentral() // 添加依赖仓库
}

dependencies {
    implementation 'org.springframework:spring-core:5.3.22' // 添加依赖
}
  • 任务:任务是构建过程中的原子操作,如编译、测试、打包等。每个任务由一个 Task 对象表示,可以定义动作、依赖关系和属性。
 

groovy

task helloWorld << {
    println 'Hello, World!'
}

task copyFiles(type: Copy) { // 使用 Copy 类型的任务
    from 'src/main/resources'
    into 'build/resources'
    include '**/*.txt'
}

3. 依赖管理

Gradle 通过 dependencies 块来管理项目依赖。依赖可以分为以下几种类型:

  • implementation:编译与运行时依赖,仅对当前模块内部可见,不会传递到依赖此模块的其他模块。
  • api:与 implementation 类似,但会将依赖接口暴露给依赖此模块的其他模块。
  • compileOnly:仅用于编译期,不包含在运行时依赖中。
  • runtimeOnly:仅用于运行时,不参与编译。
  • testImplementation / testRuntimeOnly:仅用于测试编译与运行时。
 

groovy

dependencies {
    implementation 'com.google.guava:guava:31.1-jre'
    api 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.½'
    compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
    runtimeOnly 'mysql:mysql-connector-java:8.0.30'
    testImplementation 'junit:junit:4.13.2'
}

4. 插件(Plugin)

插件为 Gradle 提供了特定领域的构建功能。通过 apply plugin: 语句应用插件,插件可以添加新的任务、扩展项目属性、引入默认依赖等。

 

groovy

apply plugin: 'java' // Java 插件
apply plugin: 'maven-publish' // Maven 发布插件
apply plugin: 'com.github.johnrengelman.shadow' // Shadow 插件用于生成 fat JAR

publishing {
    publications {
        maven(MavenPublication) {
            from components.java
        }
    }
}

5. 脚本逻辑与控制流

由于 Gradle 脚本使用 Groovy 或 Kotlin 编写,可以直接利用这些语言的控制流特性:

 

groovy

if (project.hasProperty('debugMode')) {
    println 'Building in debug mode'
}

tasks.withType(Test) {
    systemProperties 'env': 'test'
    maxParallelForks = 2
}

def versions = ['1.¼', '1.5', '2.0']
versions.each { version ->
    task("generateDocsFor$v") {
        doLast {
            println "Generating docs for version $version"
        }
    }
}

6. 构建变体(Variant)与多项目构建

Gradle 支持构建变体来处理不同构建场景的需求,如不同构建类型(debug/release)、不同构建 flavor(免费版/付费版)等。对于多项目构建,通过 settings.gradle 定义项目结构,并在各个项目间声明依赖关系。

 

groovy

// settings.gradle
include 'app', 'library'

project(':app').dependsOn ':library'

7. 自定义任务与类型

除了使用现有任务类型,Gradle 还支持自定义任务类和扩展已有类型。

 

groovy

 class MyCustomTask extends DefaultTask {
    @InputFile
    File inputFile

    @OutputFile
    File outputFile

    @TaskAction
    void generate() {
        // 实现任务逻辑
    }
}

task customTask(type: MyCustomTask) {
    inputFile = file('input.txt')
    outputFile = file('output.txt')
}

8. 构建缓存与增量构建

Gradle 提供了高效的缓存机制和增量构建能力,可以避免重复工作,加快构建速度。

 

groovy

// 启用缓存
tasks.withType(AbstractCompile).each { it.options.incremental = true }

// 清除缓存
gradle.buildCache.clean()

9. 命令行交互

Gradle 提供丰富的命令行选项,如 --info--stacktrace--dry-run 等,用于控制构建过程的输出和行为。

 

sh

./gradlew build --info
./gradlew clean test --rerun-tasks

以上是 Gradle 语法的一些基本要点。实际使用时,应结合官方文档和具体项目需求来深入理解和应用 Gradle 的各种特性。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值