Gradle发布到Maven生成带-plain后缀jar,Maven POM依赖无法正常引入
-plain后缀出现的原因 该后缀是org.springframework.boot Gradle插件的默认行为导致的:
- 引入Spring Boot插件后,构建过程会默认生成两类JAR包
- 无后缀的JAR:内置所有依赖的可执行Fat Jar,无法被其他项目作为普通依赖引入
- 带
-plain后缀的JAR:仅包含当前项目编译产物的普通JAR,可作为公共依赖被引用
- 插件默认给普通JAR添加了
plain分类器(classifier),发布到Maven仓库后,Maven依赖默认拉取无分类器的主构件,因此找不到对应可依赖的JAR包。
配置Gradle生成无
-plain后缀的JAR 根据你的项目使用场景选择对应配置即可:
场景1:项目仅作为公共依赖库,不需要生成可执行Fat Jar
Groovy语法(build.gradle)
// 禁用可执行Fat Jar生成任务 bootJar.enabled = false // 配置普通JAR任务清空分类器,去掉-plain后缀 jar { enabled = true archiveClassifier = '' }
Kotlin DSL语法(build.gradle.kts)
tasks.getByName<org.springframework.boot.gradle.tasks.bundling.BootJar>("bootJar") { isEnabled = false } tasks.getByName<Jar>("jar") { isEnabled = true archiveClassifier.set("") }
场景2:需要同时保留可执行Fat Jar和可依赖的普通JAR
在maven-publish插件的发布配置中指定主构件为普通JAR即可:
Groovy语法(build.gradle)
publishing { publications { mavenJava(MavenPublication) { // 指定发布普通JAR作为主构件 from components.java } } }
Kotlin DSL语法(build.gradle.kts)
publishing { publications { create<MavenPublication>("mavenJava") { from(components["java"]) } } }
配置完成后重新执行publishToMavenLocal任务,生成的JAR就不会带-plain后缀,其他Maven项目可以直接正常引入依赖。
内容的提问来源于stack exchange,提问作者fedmest
相关产品推荐
相关产品推荐

