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

JavaSpringSpring BootKotlinGradle

Java 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTien Do NamView Question on Stackoverflow
Solution 1 - JavaTien Do NamView Answer on Stackoverflow
Solution 2 - JavaLiZongboView Answer on Stackoverflow
Solution 3 - Java0caseView Answer on Stackoverflow
Solution 4 - Javasunny View Answer on Stackoverflow
Solution 5 - JavaslorincView Answer on Stackoverflow