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

Gradle:将KAPT生成的Kotlin源码添加到sources JAR的正确方式

解决KAPT生成代码打包进sources.jar及IDEA重复内容根问题
  • 别手动把KAPT生成目录加到main源集里,这就是循环依赖和重复根警告的根源。Gradle的KAPT插件已经自动管理了生成代码的源集,直接用kapt.main.generatedSourcesDir就能拿到对应目录。
  • 配置sourcesJar任务时,直接把KAPT生成的源码加进去就行,不用动main源集:
tasks.withType(Jar).named("sourcesJar") {
    from sourceSets.main.allSource
    // 加入KAPT生成的源码目录
    from kapt.main.generatedSourcesDir
}

要是想更精准,只打包Java和Kotlin源码,可以这么写:

tasks.named("sourcesJar") {
    from sourceSets.main.java
    from sourceSets.main.kotlin
    from fileTree(kapt.main.generatedSourcesDir) {
        include "**/*.java"
        include "**/*.kt"
    }
}
  • 要是你用的是Android项目,配置逻辑差不多,注意用android.sourceSets.main:
android {
    // ... 其他项目配置
    sourceSets {
        main {
            // 绝对不要在这里加kapt生成目录!
        }
    }
}

tasks.named("sourcesJar") {
    from android.sourceSets.main.java.srcDirs
    from android.sourceSets.main.kotlin.srcDirs
    from kapt.main.generatedSourcesDir
}

这么做的好处:

  1. 不碰main源集,彻底避免循环依赖问题
  2. IDEA不会再报“重复内容根”,因为没手动把生成目录塞进main源集
  3. sourcesJar能准确打包KAPT生成的代码

最后检查下之前的构建脚本,要是有手动添加生成目录到main源集的代码,比如下面这种,一定要删掉:

sourceSets.main.java.srcDirs += file("build/generated/source/kapt/main")

内容的提问来源于stack exchange,提问作者Kirill Gagarski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:48:17