Skip to content

编译配置

Java 编译参数

kotlin
tasks.withType<JavaCompile> {
    options.apply {
        encoding = "UTF-8"
        isDeprecation = true          // 显示废弃 API 警告
        isWarnings = true             // 显示警告
        isDebug = true                // 生成调试信息
        
        compilerArgs.addAll(listOf(
            "-Xlint:all",             // 所有 Lint 检查
            "-Xlint:-processing",     // 排除注解处理警告
            "-parameters",            // 保留方法参数名(Spring 反射需要)
            "-Werror"                 // 警告视为错误
        ))
        
        // 注解处理器参数
        compilerArgs.addAll(listOf(
            "-Amapstruct.defaultComponentModel=spring"
        ))
    }
}

注解处理器(Annotation Processor)

kotlin
dependencies {
    // Lombok
    compileOnly("org.projectlombok:lombok:1.18.30")
    annotationProcessor("org.projectlombok:lombok:1.18.30")
    
    // MapStruct(需要在 Lombok 后面)
    implementation("org.mapstruct:mapstruct:1.5.5.Final")
    annotationProcessor("org.mapstruct:mapstruct-processor:1.5.5.Final")
    
    // QueryDSL
    annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jpa")
    annotationProcessor("jakarta.persistence:jakarta.persistence-api:3.1.0")
}

// 配置注解处理器输出目录
tasks.named<JavaCompile>("compileJava") {
    options.annotationProcessorPath = configurations["annotationProcessor"]
    options.generatedSourceOutputDirectory.set(
        layout.buildDirectory.dir("generated/sources/annotationProcessor/java/main")
    )
}

// 将生成的源码加入 sourceSets
sourceSets.main {
    java.srcDir(layout.buildDirectory.dir("generated/sources/annotationProcessor/java/main"))
}

Java Toolchain(跨 JDK 构建)

Toolchain 允许指定编译时使用的 JDK 版本,即使构建机器上安装的是不同版本:

kotlin
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(17))
        vendor.set(JvmVendorSpec.ADOPTIUM)  // 指定 JDK 供应商
    }
}

// 单独配置某个任务的 JDK
tasks.named<JavaCompile>("compileJava") {
    javaCompiler.set(javaToolchains.compilerFor {
        languageVersion.set(JavaLanguageVersion.of(21))
    })
}
bash
# 查看可用的 JDK
./gradlew -q javaToolchains

Kotlin 编译配置

kotlin
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions {
        jvmTarget = "17"
        freeCompilerArgs = listOf(
            "-Xjsr305=strict",       // 严格 null 检查
            "-Xjvm-default=all",     // Kotlin 接口默认方法
            "-opt-in=kotlin.RequiresOptIn"
        )
        apiVersion = "1.9"
        languageVersion = "1.9"
    }
}

增量编译

Gradle Java 插件默认开启增量编译(只重新编译变更的文件及其依赖):

kotlin
tasks.withType<JavaCompile> {
    options.isIncremental = true  // 默认已开启
}

下一步