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

使用Gradle MavenPublish发布Spring Boot Jar时遇版本依赖错误求助

解决Gradle maven-publish发布Spring Boot应用时的版本元数据错误

你碰到的这个generateMetadataFileForMavenJavaPublication失败问题,根源在于Spring Boot的dependency-management插件帮你统一管理了所有依赖的版本,但默认的maven-publish插件在生成Maven元数据时,没法自动获取这些已经被解析好的依赖版本,导致元数据里的依赖项都没有版本号,不符合Maven仓库的规范要求。

下面给你几个实用的解决办法:

方法一:让发布任务使用已解析的依赖版本

修改你的publishing配置块,添加版本映射规则,让Gradle把dependency-management锁定的版本写入元数据:

publishing {
    publications {
        mavenJava(MavenPublication){
            components.java
            // 添加版本映射,使用已解析的依赖版本
            versionMapping {
                usage('java-api') {
                    fromResolutionOf('runtimeClasspath')
                }
                usage('java-runtime') {
                    fromResolutionResult()
                }
            }
        }
    }
}

这个配置会告诉Gradle,在生成Maven元数据时,直接使用项目构建过程中已经解析好的依赖版本,完美适配Spring Boot的依赖管理机制。

方法二:改用Spring Boot官方的发布插件

Spring Boot专门提供了适配自身的Maven发布插件,能自动处理这类元数据问题,配置起来更省心。你可以修改plugins块,替换原生的maven-publish:

plugins {
    id 'org.springframework.boot' version '2.2.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    // 添加Spring Boot的Maven发布插件
    id 'org.springframework.boot.maven' version '2.2.6.RELEASE'
}

之后直接执行./gradlew bootPublishMaven就能完成发布,不需要额外配置元数据相关的内容。

方法三:手动在POM中引用Spring Boot BOM(进阶场景)

如果你的项目有特殊的依赖管理需求,也可以在发布的POM中手动引用Spring Boot的BOM,让Maven客户端能通过BOM获取依赖版本:

publishing {
    publications {
        mavenJava(MavenPublication){
            components.java
            pom {
                dependencyManagement {
                    dependencies {
                        dependency 'org.springframework.boot:spring-boot-dependencies:2.2.6.RELEASE'
                    }
                }
            }
        }
    }
}

不过对于普通的Spring Boot项目,前两种方法已经足够简单好用了,这个方法更适合复杂的多模块或自定义依赖场景。

另外补充一点:你日志里看到application-jar:jar被SKIPPED,是因为Spring Boot默认生成的是可执行jar,而components.java默认关联的是普通jar。如果需要发布Spring Boot的可执行jar,可以把publication配置改成:

mavenJava(MavenPublication){
    artifact bootJar
}

这样发布的就是Spring Boot打包好的可执行jar包了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:22:30