'Spring Boot 2.5.0 generates plain.jar file. Can I remove it?

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()
}



Solution 1:[1]

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:[2]

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:[3]

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:[4]

Tested solution. I was facing the same issue: just add below in your gradle

jar{
    archiveClassifier=''
    enabled = false
}

Solution 5:[5]

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.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 ℛɑƒæĿᴿᴹᴿ
Solution 3 Innokenty
Solution 4 aaossa
Solution 5 slorinc