'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'
}

Release notes mentioning change of the property

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