Spring Boot应用的Unable to find main class异常详解

1. Spring Boot应用执行java -jar myApp.jar时,出现如下异常:

 

 
  1. [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.4.RELEASE:repackage (default) on project teac:

  2. Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.4.RELEASE:repackage failed:

  3. Unable to find main class -> [Help 1]

 

 

Spring Boot应用的pom.xml文件中相关配置如下:

 

 
  1. <parent>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-parent</artifactId>

  4. <version>1.5.4.RELEASE</version>

  5. <relativePath></relativePath>

  6. </parent>

  7. <build>

  8. <plugins>

  9. <plugin>

  10. <groupId>org.springframework.boot</groupId>

  11. <artifactId>spring-boot-maven-plugin</artifactId>

  12. </plugin>

  13. </plugins>

  14. </build>



2. 异常分析

 

构建过程能够顺利完成,说明Spring Boot应用的代码编译没有问题。

下面看看Spring Boot应用的启动过程。对于以“java -jar”方式启动Spring Boot应用,Spring Boot Loader启动时,首先扫描Spring Boot应用的根路径下的配置类(@Configuration修饰的类),该类中往往定义main()函数,并在main()函数中调用SpringApplication.run(...)以启动应用,如下所示。

 

 
  1. @Configuration

  2. @EnableAutoConfiguration

  3. @ComponentScan

  4. public class MyApplication {

  5.  
  6. public static void main(String[] args) {

  7. SpringApplication.run(MyApplication.class, args);

  8. }

  9.  
  10. }

或者

 

 

 
  1. @SpringBootApplication

  2. public class MyApplication {

  3.  
  4. public static void main(String[] args) {

  5. SpringApplication.run(MyApplication.class, args);

  6. }

  7.  
  8. }


如果发现有且仅有一个这样的类,则执行其main()函数启动Spring Boot应用。

 

如果没有发现任何这样的类,或者发现了多个这样的类,则Spring Boot Loader就无法确定以哪个为准,从而抛出了上述异常。

 

3. 解决方案

首先,作为一个Spring Boot应用,不能没有配置类。

其次,Spring Boot应用中可能在为不同的环境定义的多个不同的配置类,究竟以哪个为准启动应用,可以配置pom.xml文件如下以解决。

 

 
  1. <properties>

  2. <start-class>com.ericsson.MyApplication</start-class>

  3. </properties>

 

 

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/taiyangdao/article/details/75452665

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
报错"unable to find main class"意味着在打包过程中找不到主启动类。这个问题可能会导致打包失败。有两种方法可以解决这个问题。 方法一:检查项目的主启动类是否正确配置。确保在Maven聚合工程的父工程中正确指定了主启动类。如果主启动类没有指定或者指定错误,就会出现无法找到主启动类的错误信息。 方法二:使用Spring Boot Maven插件进行配置。在父工程的pom.xml文件中添加以下配置: ``` <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>none</mainClass> <!-- 取消查找本项目下的Main方法:为了解决Unable to find main class的问题 --> <classifier>execute</classifier> <!-- 为了解决依赖模块找不到此模块中的类或属性 --> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> ``` 这样配置可以解决依赖模块找不到主启动类的问题,并且取消了对本项目下Main方法的查找。 综上所述,如果出现"unable to find main class"的错误信息,可以通过检查主启动类的配置或使用Spring Boot Maven插件进行配置来解决。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Maven项目打包报错:Unable to find main class](https://blog.csdn.net/m0_63926154/article/details/126926074)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [项目打包公共模块失败【error:repackage failed: Unable to find main class】](https://blog.csdn.net/qq_35598594/article/details/125698767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值