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

Gradle ShadowJar未打包其中一个内部依赖问题排查

问题分析与解决方案

你的核心问题是Gradle的runtimeClasspath配置未解析到com.idsk.lib.client:lib:0.0.1-SNAPSHOT依赖,因此ShadowJar无法将其打包进胖JAR。以下是可能的原因和对应的解决步骤:

可能的原因

  • 依赖仓库未配置快照源:com.idsk.lib.client的快照包所在仓库未被Gradle识别,或仓库未开启快照支持
  • 依赖被意外排除:项目中存在全局或局部的依赖排除规则,移除了com.idsk.lib.client
  • 依赖构件异常:com.idsk.lib.client:lib:0.0.1-SNAPSHOT的构件类型错误(比如是pom而非jar),或其POM中声明了provided等非runtime范围
  • 依赖未实际发布:该快照包并未上传到仓库,本地仓库也不存在对应的构件

解决步骤

1. 检查并完善仓库配置

确保Gradle能访问到包含com.idsk.lib.client快照包的仓库,尤其是开启快照支持:

repositories {
    mavenCentral()
    mavenLocal()
    // 替换为你的内部快照仓库地址
    maven {
        url "https://your-internal-repo/snapshots"
        mavenContent {
            snapshotsOnly() // 仅拉取快照包
        }
        // 如果仓库是HTTP协议,需要添加以下配置(Gradle 7+默认禁用HTTP)
        allowInsecureProtocol = true
    }
}

2. 排查依赖排除规则

执行以下命令查看runtimeClasspath的完整依赖树,确认是否有排除com.idsk.lib.client的规则:

./gradlew dependencies --configuration runtimeClasspath

如果发现排除规则,找到对应代码(比如configurations.all { exclude ... }或依赖声明中的exclude)并移除。

3. 验证依赖构件的可用性

  • 检查本地Maven仓库(默认路径~/.m2/repository/com/idsk/lib/client/0.0.1-SNAPSHOT)是否存在对应的jar文件
  • 如果本地没有,手动触发依赖拉取:
./gradlew build --refresh-dependencies

4. 调整ShadowJar的配置(可选)

尝试使用Shadow插件自带的shadowRuntimeClasspath配置替代原生的runtimeClasspath,该配置会自动包含Shadow插件所需的所有依赖:

tasks.named<ShadowJar>("shadowJar") {
    // 替换为shadowRuntimeClasspath
    configurations = listOf(project.configurations.shadowRuntimeClasspath.get())
    // 其余配置保持不变
    destinationDirectory.set(File("${project.projectDir}/artifacts"))
    archiveClassifier.set("")
    isZip64 = true
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    mergeServiceFiles()

    manifest {
        attributes(mapOf("Main-Class" to "com.interviewdesk.service.assessmentsessionv2.Application"))
    }

    exclude("META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA")
    exclude("**/Log4j2Plugins.dat")
}

5. 检查依赖的POM文件

如果是内部开发的依赖,确认com.idsk.lib.client:lib的POM文件:

  • packaging字段是否为jar
  • 没有错误的scope声明(比如provided或test)
  • 依赖本身没有缺失必要的构件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:19:54