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

Gradle发布Spring Boot项目时去除Jar的plain分类器问题

问题描述

使用Spring Boot 2.7.5框架的Gradle项目,基础信息如下:

  • group id:com.test
  • artifact id:sample
  • version:1.0.0

需求是将普通jar和bootJar都发布到Maven仓库:

  • 普通jar:命名为sample-1.0.0.jar(作为资产归档)
  • bootJar:命名为sample_starter-1.0.0.jar(用于Linux服务器构建Docker容器)

但实际发布后得到的是sample_starter-1.0.0.jar和sample-1.0.0-plain.jar,尝试设置jar任务的classifier=''来去除plain分类器,但无效。当前build.gradle配置如下:

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.5'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'maven-publish'
}

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-test'
}

group='com.test'
version='1.0.0'

publishing {
    publications {
        plainJar(MavenPublication) {
            artifact jar
        }
        starterJar(MavenPublication) {
            artifact bootJar {
                artifactId = "${project.name}_starter"
            }
        }
    }
    repositories {
        maven {
            name = 'myRepo'
            url = layout.buildDirectory.dir("myRepo")
        }
    }
}
解决方案

问题根源是Spring Boot插件会默认修改jar任务,为其添加plain分类器——因为Spring Boot将bootJar设为默认的主jar产物。直接设置jar.classifier = ''会被Spring Boot插件的配置覆盖,需要通过Spring Boot的扩展来调整:

修改后的build.gradle配置如下:

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.5'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'maven-publish'
}

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

group='com.test'
version='1.0.0'

// 关键配置:覆盖Spring Boot默认设置,取消普通jar的plain分类器
springBoot {
    jar {
        classifier = ''
    }
}

publishing {
    publications {
        mainJar(MavenPublication) {
            artifact jar
        }
        starterJar(MavenPublication) {
            artifact bootJar {
                artifactId = "${project.name}_starter"
            }
        }
    }
    repositories {
        maven {
            name = 'myRepo'
            url = layout.buildDirectory.dir("myRepo")
        }
    }
}

配置说明

  1. 通过springBoot.jar.classifier = ''配置,直接修改Spring Boot插件对普通jar的命名规则,确保生成不带分类器的sample-1.0.0.jar
  2. 保留bootJar的发布配置,依然将其artifact id设为sample_starter,生成sample_starter-1.0.0.jar
  3. 若项目使用Spring Boot自动主类检测,可省略mainClass配置;若需指定,补充mainClass = '你的主类全限定名'即可

执行publish任务后,就能得到预期的两个jar产物。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:12:31