Spring Boot 2.5.0 generates plain.jar file. Can I remove it?
JavaSpringSpring BootKotlinGradleJava Problem Overview
After the Spring Boot 2.5.0 update, it generates the myprogram-0.0.1-plain.jar
file alongside the usual myprogram-0.0.1.jar
. Can I disallow gradle to generate the *.plain.jar
file? I use Gradle 7.0.2.
What I get:
build/
libs/
myprogram-0.0.1.jar
myprogram-0.0.1-plain.jar
What I want:
build/
libs/
myprogram-0.0.1.jar
build.gradle:
plugins {
id 'org.springframework.boot' version '2.5.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
Java Solutions
Solution 1 - Java
It was a change in Spring Boot 2.5.0.
As @ThomasKläger pointed out: You can set it in the build.gradle
configuration.
build.gradle
jar {
enabled = false
}
For Kotlin devs:
tasks.getByName<Jar>("jar") {
enabled = false
}
Alternatively, you can run the bootJar
task. It produces only the default runnable jar.
Solution 2 - Java
Try use follow setting:
jar {
enabled = true
archiveClassifier = '' //use empty string
}
Because org.springframework.boot.gradle.plugin.JavaPluginAction.java
private void classifyJarTask(Project project) {
project.getTasks().named(JavaPlugin.JAR_TASK_NAME, Jar.class)
.configure((task) -> task.getArchiveClassifier().convention("plain"));
}
From spring-boot-gradle-plugin
sources file:
See:
Solution 3 - Java
This gradle config will produce myprogram-0.0.1.jar
instead of myprogram-0.0.1-plain.jar
In your build.gradle.kts
// Build executable jar
tasks.jar {
enabled = true
// Remove `plain` postfix from jar file name
archiveClassifier.set("")
}
Solution 4 - Java
Tested solution. I was facing the same issue: just add below in your gradle
jar{
archiveClassifier=''
enabled = false
}
Solution 5 - Java
Instead of using the build
gradle task you could use bootJar
. That will only build the bootable jar.
Keep in mind that bootJar
won't run your tests before building.