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

如何用Gradle Kotlin脚本构建包含依赖源码的胖源码Jar包?

构建包含所有依赖源码的胖源码Jar包(Kotlin DSL)

一、实现胖源码Jar构建

你可以通过自定义Gradle任务,结合源码依赖配置,实现包含自身及所有依赖源码的「胖源码Jar」。以下是完整实现步骤:

1. 定义源码依赖配置

首先创建一个自定义配置,专门管理所有源码相关的依赖:

// 自定义配置,用于统一管理源码依赖(项目内模块、本地库源码)
val sourceDependencies by configurations.creating {
    isCanBeResolved = true
    isCanBeConsumed = false
}

2. 声明源码依赖

在dependencies块中,像声明主依赖一样声明对应源码:

dependencies {
    // 主业务依赖(原有的实现依赖)
    implementation(project(":common"))
    implementation(files("../libs/somejar1.jar"))
    implementation(files("../libs/somejar2.jar"))

    // 对应源码依赖
    // 项目内模块:依赖其源码Jar任务产物(需确保该模块已配置sourcesJar)
    sourceDependencies(project(":common", "sourcesJar"))
    // 本地第三方库:直接指定源码Jar文件
    sourceDependencies(files("../libs/somejar1-sources.jar"))
    // 本地第三方库:若源码是目录形式,直接指定目录路径
    sourceDependencies(files("../libs/somejar2-sources"))
}

注:如果项目内模块未配置sourcesJar任务,可直接依赖其源码目录:

sourceDependencies(project(":common")) {
    artifact {
        type = "source"
        from(project(":common").sourceSets.main.get().allSource)
    }
}

3. 创建胖源码Jar任务

注册一个自定义Jar任务,收集所有源码并打包:

tasks.register<Jar>("fatSourcesJar") {
    // 设置Jar包后缀为sources,方便区分
    archiveClassifier.set("sources")
    // 排除重复的源码文件
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE

    // 1. 添加当前模块自身的源码
    from(sourceSets.main.get().allSource)

    // 2. 添加项目内依赖模块的源码(可选,若已通过sourceDependencies依赖则可省略)
    configurations.implementation.get().dependencies
        .filterIsInstance<ProjectDependency>()
        .forEach { dep ->
            from(dep.dependencyProject.sourceSets.main.get().allSource)
        }

    // 3. 添加本地第三方库的源码(通过自定义配置获取)
    from(sourceDependencies.map { if (it.isDirectory) it else zipTree(it) })
}

执行./gradlew fatSourcesJar即可生成目标胖源码Jar包,默认输出路径为build/libs/[模块名]-sources.jar。

二、类似依赖声明的源码管理方案

Gradle没有原生的sources块,但通过上面的自定义配置sourceDependencies,你可以完全实现「像声明依赖一样声明源码」的需求:

  • 统一在dependencies块中维护主依赖与对应源码依赖的关联
  • 支持项目内模块、本地Jar/目录等多种源码来源
  • 遵循Gradle的依赖解析逻辑,自动处理任务依赖(比如项目模块的源码Jar会自动先构建再打包)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:25:21