Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Unable to find main class" with Maven on spring-boot project in Eclipse

I am pretty desperate since I no longer can compile my Maven projects. I have one logical project split into 7 maven modules which so far compiled fine, but today I introduced a feature, whereby I accidentally generated a circular maven dependency. Therefore I refactored the code and eliminated the circular dependency. Ever since I updated the pom files to reflect the fix my project doesn't build anymore. When I run maven with "-X clean install" I get the following java.lang.IllegalStateException: Unable to find main class

[INFO] Error stacktraces are turned on. [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO]  [INFO] agiletunes-parent [INFO] agiletunes-util [INFO] agiletunes-security-common [INFO] agiletunes-marketing-persistence [INFO] agiletunes-common-ui [INFO] agiletunes-security-client [INFO] agiletunes-marketing-application [INFO] agiletunes-security-server [INFO]                                                                          [INFO] ------------------------------------------------------------------------ [INFO] Building agiletunes-parent 0.0.1 [INFO] ------------------------------------------------------------------------ [INFO]  [INFO] --- spring-boot-maven-plugin:1.5.2.RELEASE:repackage (default) @ agiletunes-parent --- [INFO]  [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ agiletunes-parent --- [INFO] Installing C:\Users\Alexander\Documents\Development\agileTunes\agiletunes-parent\pom.xml to C:\Users\Alexander\Documents\Development\mavenArtifacts\com\agiletunes\agiletunes-parent\0.0.1\agiletunes-parent-0.0.1.pom [INFO]                                                                          [INFO] ------------------------------------------------------------------------ [INFO] Building agiletunes-util 0.0.1 [INFO] ------------------------------------------------------------------------ [INFO]  [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ agiletunes-util --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory C:\Users\Alexander\Documents\Development\agileTunes\agiletunes-util\src\main\resources [INFO] skip non existing resourceDirectory C:\Users\Alexander\Documents\Development\agileTunes\agiletunes-util\src\main\resources [INFO]  [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ agiletunes-util --- [INFO] Nothing to compile - all classes are up to date [INFO]  [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ agiletunes-util --- [INFO] Not copying test resources [INFO]  [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ agiletunes-util --- [INFO] Not compiling test sources [INFO]  [INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ agiletunes-util --- [INFO] Tests are skipped. [INFO]  [INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ agiletunes-util --- [INFO]  [INFO] --- spring-boot-maven-plugin:1.5.2.RELEASE:repackage (default) @ agiletunes-util --- [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO]  [INFO] agiletunes-parent .................................. SUCCESS [  1.492 s] [INFO] agiletunes-util .................................... FAILURE [  1.095 s] [INFO] agiletunes-security-common ......................... SKIPPED [INFO] agiletunes-marketing-persistence ................... SKIPPED [INFO] agiletunes-common-ui ............................... SKIPPED [INFO] agiletunes-security-client ......................... SKIPPED [INFO] agiletunes-marketing-application ................... SKIPPED [INFO] agiletunes-security-server ......................... SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.674 s [INFO] Finished at: 2017-03-21T21:53:04+01:00 [INFO] Final Memory: 31M/309M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage (default) on project agiletunes-util: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage failed: Unable to find main class -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage (default) on project agiletunes-util: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage failed: Unable to find main class     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)     at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at java.lang.reflect.Method.invoke(Method.java:498)     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage failed: Unable to find main class     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)     ... 20 more Caused by: java.lang.IllegalStateException: Unable to find main class     at org.springframework.boot.loader.tools.Repackager.buildManifest(Repackager.java:354)     at org.springframework.boot.loader.tools.Repackager.repackage(Repackager.java:273)     at org.springframework.boot.loader.tools.Repackager.repackage(Repackager.java:258)     at org.springframework.boot.loader.tools.Repackager.repackage(Repackager.java:190)     at org.springframework.boot.maven.RepackageMojo.repackage(RepackageMojo.java:212)     at org.springframework.boot.maven.RepackageMojo.execute(RepackageMojo.java:199)     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)     ... 21 more [ERROR]  ... 

This is the pom.xml of my maven parent project:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>  <groupId>com.agiletunes</groupId> <artifactId>agiletunes-parent</artifactId> <version>0.0.1</version>  <packaging>pom</packaging> <name>agiletunes-parent</name> <description>Maven parent project of agiletunes</description>  <parent>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-parent</artifactId>     <version>1.5.2.RELEASE</version>     <relativePath></relativePath> </parent>  <modules>     <module>../agiletunes-common-ui</module>     <module>../agiletunes-marketing-application</module>     <module>../agiletunes-marketing-persistence</module>     <module>../agiletunes-security-client</module>     <module>../agiletunes-security-common</module>     <module>../agiletunes-security-server</module>     <module>../agiletunes-util</module> </modules>  <properties>     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>      <!-- Java -->     <java.version>1.8</java.version>      <!-- Spring -->     <spring.boot.version>1.5.2.RELEASE</spring.boot.version>      <!-- persistence -->     <mysql-connector-java.version>6.0.5</mysql-connector-java.version>      <!-- util -->     <guava.version>17.0</guava.version>      <!-- testing -->     <mockito.version>1.9.5</mockito.version>  </properties>  <dependencies>      <!-- Spring -->     <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-data-jpa</artifactId>     </dependency>     <dependency>         <groupId>mysql</groupId>         <artifactId>mysql-connector-java</artifactId>         <version>${mysql-connector-java.version}</version><!--$NO-MVN-MAN-VER$ -->         <scope>runtime</scope>     </dependency>      <!-- utils -->     <dependency>         <groupId>com.google.guava</groupId>         <artifactId>guava</artifactId>         <version>${guava.version}</version>     </dependency>      <!-- unit test framework -->     <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-test</artifactId>         <scope>test</scope>     </dependency>      <dependency>         <groupId>org.mockito</groupId>         <artifactId>mockito-core</artifactId>         <version>${mockito.version}</version>         <scope>test</scope>     </dependency>  </dependencies>  <build>     <plugins>         <plugin>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-maven-plugin</artifactId>         </plugin>     </plugins> </build> 

What do I need to do, to fix this? Please let me know, should you need additional information. Thank you in advance.

like image 464
Alex Avatar asked Mar 21 '17 20:03

Alex


People also ask

Where is the main class in spring boot?

A Spring Boot application's main class is a class that contains a public static void main() method that starts up the Spring ApplicationContext. By default, if the main class isn't explicitly specified, Spring will search for one in the classpath at compile time and fail to start if none or multiple of them are found.

How to create a Spring Boot Maven project from Eclipse?

Use STS or STS Eclipse Plugin and Create a Spring Boot Maven Project directly from Eclipse Manually Create a Maven Project and add Spring Boot Starter Dependencies. We will use a Spring Boot Starter Web as an example. Creating a Web application with Spring Initializr is a cake walk. We will use Spring Web MVC as our web framework.

Why eclipse can’t find main class?

If we import the project from outside without default class path eclipse can’t find main class. Or else if any mistake is in user entry or Bootstrap entries in class path then also eclipse can’t find .class file of main class.

What happened to the Spring Boot MVN plugin?

It ended being a spring boot mvn plugin declaration on a subproject that does not actually run (no main class). I just removed the spring boot mvn plugin from the submodule and everything ran fine Simple and good answer. It is worked for me as for no run library project.

How do I define the main class of the Spring-Boot-Maven-plugin?

Alternatively, the main class can be defined as the mainClass element of the spring-boot-maven-plugin in the plugin section of our pom.xml: An example of this Maven configuration can be found over on GitHub.


2 Answers

You should have this

<build>     <plugins>         <plugin>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-maven-plugin</artifactId>         </plugin>     </plugins> </build> 

only in those modules that you want to run, but not in the parent pom.

like image 114
Pavel Grigorev Avatar answered Sep 20 '22 06:09

Pavel Grigorev


Just for someone who faced with similar problem. I added spring-boot-maven-plugin in parent POM in section pluginManagement section like this:

 <build>     <pluginManagement>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </pluginManagement> </build> 

Then I added the plugin only in the modules using it (in plugin section).The project has been successfully built after that.

like image 33
Vladimir Lebedev Avatar answered Sep 17 '22 06:09

Vladimir Lebedev