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

如何将依赖源码添加至Gradle的sourceJar任务输出?

Gradle多模块构建:整合模块与本地依赖源码到Sources Jar

核心问题解决:提取本地源码Jar内容

你之前用from(file("../path/dependency-1.0.0-sources.jar"))会把整个Jar作为文件打包进sourcesJar,原因是没有对Jar文件进行解压。Gradle的zipTree()方法可以解压Zip/Jar文件,将其中的内容添加到输出Jar中,替换成以下写法即可:

tasks.sourcesJar {
    // 添加项目内moduleA的源码
    from project(':moduleA').sourceSets.main.allSource
    // 解压并添加本地源码Jar的内容
    from zipTree(file("../path/dependency-1.0.0-sources.jar"))
}

如果有多个本地源码Jar,直接追加多个from zipTree(...)即可:

tasks.sourcesJar {
    from project(':moduleA').sourceSets.main.allSource
    from zipTree(file("../path/dep1-sources.jar"))
    from zipTree(file("../path/dep2-sources.jar"))
    // 更多本地源码Jar依次添加
}

完整配置示例(主模块build.gradle,Groovy语法)

假设你的主模块是moduleB,需要生成包含所有依赖编译代码的胖Jar和整合所有源码的sourcesJar,完整配置如下:

plugins {
    id 'java-library'
}

java {
    withSourcesJar()
}

// 生成包含所有依赖编译代码的胖Jar
tasks.jar {
    // 如果需要主类可以取消注释
    // manifest.attributes['Main-Class'] = 'com.example.MyMainClass'
    from configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

// 整合项目模块与本地依赖源码到sourcesJar
tasks.sourcesJar {
    // 添加项目内moduleA的源码
    from project(':moduleA').sourceSets.main.allSource
    // 添加本地源码Jar的解压内容
    from zipTree(file("../path/dependency-1.0.0-sources.jar"))
    // 若有多个本地源码Jar,继续添加
    // from zipTree(file("../path/another-dep-sources.jar"))
}

验证与构建

执行以下命令完成构建:

./gradlew :moduleB:build

构建完成后,在moduleB/build/libs/目录下会生成两个文件:

  • moduleB-0.5.0.jar:包含所有模块和依赖的编译代码(胖Jar)
  • moduleB-0.5.0-sources.jar:包含moduleB自身源码、moduleA源码,以及所有本地依赖的源码

内容的提问来源于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 03:35:25