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

执行publishToMavenLocal后Maven本地仓库未生成目标jar包问题

问题原因

该问题是Spring Boot Gradle插件的默认行为导致的:

  • Spring Boot 2.5及以上版本中,org.springframework.boot插件会默认修改Jar任务的输出规则:不带后缀的custom-codegen-0.0.1-SNAPSHOT.jar默认是可执行Fat Jar(包含所有内置依赖,不能作为普通依赖被其他项目引用),适合作为依赖的普通Jar包会被自动加上-plain后缀命名,也就是你现在看到的custom-codegen-0.0.1-SNAPSHOT-plain.jar
  • 你当前的maven-publish配置使用from components.java默认发布的是带-plain后缀的普通Jar,没有对命名做调整,所以不会生成你预期的无后缀Jar包。

解决方案

根据你的项目用途选择对应配置即可:

场景1:项目是公共依赖库,不需要打包为可执行Spring Boot应用

直接禁用BootJar任务,让默认Jar任务生成无后缀的普通依赖Jar即可,在build.gradle中添加如下配置:

// 禁用可执行BootJar任务
bootJar {
    enabled = false
}
// 配置普通Jar任务的命名,去掉-plain后缀
jar {
    enabled = true
    archiveClassifier = ''
}

修改后重新执行publishToMavenLocal就能得到无后缀的custom-codegen-0.0.1-SNAPSHOT.jar,这个Jar可以直接作为依赖被其他项目引用。

场景2:项目既需要作为可执行Spring Boot应用运行,又需要发布可被依赖的普通Jar

不需要禁用BootJar,只需要调整发布配置,指定发布的Jar包规则即可,修改publishing配置段:

publishing {
    publications {
        mavenJava(MavenPublication) {
            // 明确指定发布普通Jar任务的输出
            artifact jar
            from components.java
            versionMapping {
                usage('java-api') {
                    fromResolutionOf('runtimeClasspath')
                }
                usage('java-runtime') {
                    fromResolutionResult()
                }
            }
        }
    }
    repositories {
        maven {
            def releasesRepoUrl = "$buildDir/repos/releases"
            def snapshotsRepoUrl = "$buildDir/repos/snapshots"
            url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
        }
    }
}

修改后执行发布命令,会同时保留可执行的Fat Jar和无后缀的可依赖Jar。

注意:如果你的项目内有@SpringBootApplication注解的启动类,作为依赖发布时建议将启动类放到独立的包路径下,避免被其他引用项目的组件扫描逻辑误加载导致报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:24:04