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") } } }
配置说明
- 通过
springBoot.jar.classifier = ''配置,直接修改Spring Boot插件对普通jar的命名规则,确保生成不带分类器的sample-1.0.0.jar - 保留
bootJar的发布配置,依然将其artifact id设为sample_starter,生成sample_starter-1.0.0.jar - 若项目使用Spring Boot自动主类检测,可省略
mainClass配置;若需指定,补充mainClass = '你的主类全限定名'即可
执行publish任务后,就能得到预期的两个jar产物。
内容的提问来源于stack exchange,提问作者muyangren918
相关产品推荐
相关产品推荐

