'Gradle build failed: Main class name has not been configured and it could not be resolved
I am building a RESTful web service with Spring by following this guide. I am using grable to build the app but my build is failing.
I used the "build gradle" command on a Windows 10 machine.
This is the gradle code:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.6.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
bootJar {
baseName = 'gs-rest-service'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile('org.springframework.boot:spring-boot-starter-test')
}
I am getting the following error:
Execution failed for task ':bootJar'.
Main class name has not been configured and it could not be resolved
Solution 1:[1]
When building a multi-module project which includes a module outside of the springboot project, then the module's build.gradle
must contain:
bootJar {
enabled = false
}
jar {
enabled = true
}
Solution 2:[2]
I ran into this error when I used kotlin and misplaced the main
method.
Wrong:
@SpringBootApplication
class Application {
fun main(args: Array<String>) {
runApplication<Application>(*args)
}
}
Fix (moved main
out of Application
):
@SpringBootApplication
class Application
fun main(args: Array<String>) {
runApplication<Application>(*args)
}
Solution 3:[3]
So, you can configure it. Pls try:
apply plugin: 'application'
mainClassName = 'com.example.WebApplication'
Solution 4:[4]
in my case, (using Kotlin for writing springboot demo) it was caused by the src folder, the main class file did not locate under src/main folder. besides, I've clean everything up and restart IDE. As @Zaziro mentioned, I've also token a try, but without any luck. But there're articles mentioned config mainClassName,
and after comparing with src code in Github that different, it's not about any version of any package.
Wish u luck :-)
Solution 5:[5]
As @Zaziro mentioned, it's possible to define a configuration.
This site describes the different kinds of configuration very well: https://www.baeldung.com/spring-boot-main-class#gradle
IF YOU ARE USING KOTLIN:Be aware that your class name changes. You need to append your mainClassName with "Kt".
example: "com.example.Application" -> "com.example.ApplicationKt"
Solution 6:[6]
With the org.springframework.boot Gradle plugin version 2.6.2.
plugins {
id 'org.springframework.boot' version '2.4.0'
}
I had similar issue.
Execution failed for task ':bootJar'. Failed to calculate the value of task ':bootJar' property 'mainClass'. Main class name has not been configured and it could not be resolved
Now depending on the version of the springframework boot plugin you have to define the main class value on following way.
SpringFramework 2.3.12 and older
springBoot {
mainClassName = 'com.example.ExampleApplication'
}
SpringFramework 2.4.0 and newer
springBoot {
mainClass = 'com.example.ExampleApplication'
}
Solution 7:[7]
I was trying to follow the instructions at https://spring.io/guides/gs/spring-boot/ that has a CommandLineRunner in the application. The code inside the CommandLineRunner would only run if I wrapped that bean and the main method in the class. I could get tests to run but not via the command line. I was able to get around this by using a companion object:
@SpringBootApplication
class TestApplication {
companion object {
@JvmStatic
fun main(args: Array<String>) {
runApplication<TestApplication>(*args)
}
}
@Bean
fun commandLineRunner(ctx: ApplicationContext): CommandLineRunner {
...
}
}
Solution 8:[8]
If we're using the Spring Boot Gradle plugin and Kotlin you can use the snippet below:
plugins {
id("org.springframework.boot") version "2.6.7"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
kotlin("jvm") version "1.5.31"
kotlin("plugin.spring") version "1.5.31"
}
...
springBoot {
mainClass.value("com.mycompany.MyApplication")
}
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 | Christian Goetze |
Solution 2 | xilef |
Solution 3 | Zaziro |
Solution 4 | no7dw |
Solution 5 | Alkeno |
Solution 6 | RenatoIvancic |
Solution 7 | aakoch |
Solution 8 | Haim Raman |