You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法移除Gradle中generateJooq对compileKotlin的任务依赖问题

解决Gradle中nu.studer.jooq插件自动添加的任务依赖问题

问题场景

使用Gradle的nu.studer.jooq插件时,generateJooq任务被自动设置为compileJava和compileKotlin的依赖,任务依赖树如下:

:db:compileJava
+--- :db:compileKotlin
|    \--- :db:generateJooq
\--- :db:generateJooq *

需要移除该自动依赖,仅在需要时手动执行generateJooq,当前Gradle版本为8.2.1。

无效的尝试

曾使用以下代码尝试移除依赖,但无效果:

project.afterEvaluate {
    val generateJooq = tasks.findByPath("generateJooq")
    this.tasks.withType<KotlinCompile> {
        setDependsOn(dependsOn - setOf(generateJooq))
    }
}

调试发现dependsOn集合为空,但执行compileKotlin时仍会触发generateJooq。

解决方案

方法1:通过插件配置禁用自动依赖

nu.studer.jooq插件提供了generateSchemaSourceOnCompilation配置项,设置为false即可禁止编译任务自动依赖generateJooq:

jooq {
    version.set("你的JOOQ版本号") // 替换为实际使用的版本
    configurations {
        create("main") {
            generateSchemaSourceOnCompilation.set(false)
        }
    }
}

方法2:手动移除Source Set关联(若方法1无效)

插件可能将generateJooq的输出目录加入了主Source Set的源目录中,Gradle会自动将生成这些源的任务设为编译依赖。需要手动移除该关联:

project.afterEvaluate {
    val generateJooqTask = tasks.named<nu.studer.gradle.jooq.JooqGenerate>("generateJooq").get()
    
    // 从主Source Set中移除generateJooq的输出目录
    sourceSets.main {
        java.srcDirs.remove(generateJooqTask.outputDirectory)
        kotlin.srcDirs.remove(generateJooqTask.outputDirectory)
    }
    
    // 确保编译任务不依赖generateJooq
    tasks.withType<KotlinCompile> {
        dependsOn.remove(generateJooqTask)
    }
    tasks.withType<JavaCompile> {
        dependsOn.remove(generateJooqTask)
    }
}

原理说明

之前的方法无效,是因为插件并非直接给编译任务添加dependsOn,而是通过将generateJooq的输出目录注册到主Source Set的源目录中。Gradle的增量编译机制会自动识别这些生成的源文件,并将生成它们的任务(即generateJooq)设为编译任务的隐式依赖,因此仅修改dependsOn集合无法移除该关联。

内容的提问来源于stack exchange,提问作者Sebastian Lore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:28:34