Issue
Recently I ran jar
of my Spring Boot Application
. I've received an error: no main manifest attribute, in temperaturetracker-0.0.1-SNAPSHOT-plain.jar
. I've updated my build.gradle
so it would contain Main-Class
attributes, but then I do receive an error:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
at com.example.temperaturetracker.TemperatureTrackerApplication.main(TemperatureTrackerApplication.java:15)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 1 more
My build.gradle
:
plugins {
id 'org.springframework.boot' version '2.5.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'org.jetbrains.kotlin.jvm' version '1.5.30-RC'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
jar {
manifest {
attributes(
'Main-Class': 'com.example.temperaturetracker.TemperatureTrackerApplication'
)
}
}
dependencies {
// Security
implementation 'org.springframework.boot:spring-boot-starter-security:2.5.3'
implementation 'io.jsonwebtoken:jjwt:0.9.1'
// springframework
implementation 'org.springframework.boot:spring-boot-starter-websocket:2.5.3'
implementation 'org.springframework.boot:spring-boot-configuration-processor:2.5.3'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.5.3'
implementation 'org.springframework.boot:spring-boot-starter-validation:2.5.3'
implementation 'org.springframework.boot:spring-boot-configuration-processor:2.5.3'
// Firebase
implementation 'com.google.firebase:firebase-admin:8.0.0'
// Database
implementation 'org.postgresql:postgresql:42.2.23.jre7'
// Testing
testImplementation 'org.springframework.boot:spring-boot-starter-test:2.5.3'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.30-RC'
}
test {
useJUnitPlatform()
}
compileKotlin {
kotlinOptions {
jvmTarget = "11"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "11"
}
}
Main class:
package com.example.temperaturetracker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TemperatureTrackerApplication {
public static void main(String[] args) {
SpringApplication.run(TemperatureTrackerApplication.class, args);
}
}
Gradle:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip
Also hovering over Main-Class
attribute warning is visible (not sure if this has do to anything with this error):
Running my app normally by pressing green arrow or (Shift + F10) works normally. I hope someone would be able to solve my issue.
Solution
The -plain.jar
file is a plain jar file without any of Spring Boot’s customizations. This means that it doesn’t contain your application’s dependencies and can’t be launched using java -jar
.
You need to run temperaturetracker-0.0.1-SNAPSHOT.jar
instead.
Answered By - Andy Wilkinson
Answer Checked By - Clifford M. (JavaFixing Volunteer)