Gradle依赖解析异常:无法找到GitHub Packages中的all后缀Jar包
解决Gradle依赖解析找不到GitHub Packages中Jar包的问题
问题原因
升级Java 21和Gradle 8.6后,Shadow插件生成的Jar包带有-all分类器(即myapi-dateOfDay-all.jar),但发布的Maven元数据(maven-metadata.xml)中,POM文件指向的是无分类器的主Jar包(myapi-dateOfDay-1.jar)。Gradle默认会解析无分类器的主Jar包,但该Jar包并未发布到GitHub Packages,因此导致依赖解析失败。
解决方案
方案一:让Shadow Jar成为主Artifact(推荐)
修改Gradle配置,移除Shadow Jar默认的-all分类器,使其成为项目的主Jar包,这样发布后的Jar包名称会和POM文件匹配,无需依赖项目修改配置。
- 在Gradle构建脚本中添加ShadowJar任务的配置:
shadowJar { // 移除默认的'-all'分类器,生成的Jar包名称为myapi-dateOfDay.jar classifier = '' }
- 确保发布配置正确关联Shadow组件:
publications { gpr(MavenPublication) { project.shadow.component(delegate) groupId 'com.elikill58' artifactId 'myapi' } }
- 重新执行发布流程,将新构建的Jar包上传到GitHub Packages。此时发布的Jar包名称为
myapi-dateOfDay.jar,与POM文件的指向一致,依赖项目可以正常解析。
方案二:保留-all分类器,修改依赖声明(不推荐)
如果必须保留-all分类器,需要所有依赖该API的项目在依赖声明中指定分类器:
implementation 'com.elikill58:myapi:1:all'
此方法需要修改所有依赖项目的配置,维护成本较高,仅作为临时解决方案。
方案三:调整发布配置,指定Shadow Jar为主Artifact
如果不想修改ShadowJar的分类器,可以直接在发布配置中设置Shadow Jar为主Artifact,替换默认的Jar:
publications { gpr(MavenPublication) { // 移除默认的无分类器Jar artifact artifacts.removeIf { it.classifier == null } // 添加Shadow Jar作为主Artifact artifact shadowJar groupId 'com.elikill58' artifactId 'myapi' } }
此方法会让Maven元数据的主Artifact指向带-all分类器的Jar包,但部分依赖管理工具可能仍优先解析无分类器的主Artifact,因此推荐方案一。
内容的提问来源于stack exchange,提问作者Elikill58
相关产品推荐
相关产品推荐

