SpringBoot项目打包出现Unable to find main class

如果你在尝试单独打包一个Spring Boot模块时遇到“Unable to find main class”的错误,这通常意味着Maven或Gradle在构建过程中没有找到带有@SpringBootApplication注解的主类,即程序的入口点。以下是几个可能的原因及相应的解决办法:


原因与解决方法:

方法一、缺少主启动类

  • 检查模块内是否确实存在一个带有@SpringBootApplication注解的类。
  • 确认该类包含一个公有的static void main(String[] args)方法。

方法二、主启动类命名或位置错误

  • 确认主启动类的名称和包路径是否与你在构建配置中指定的一致
  • 主启动类应位于模块的合理包路径下,通常直接在模块的主要源代码目录中。

方法三、构建插件配置问题

在模块的pom.xml或build.gradle中检查spring-boot-maven-plugin或bootJar的配置。

确保正确设置了mainClass属性,指向你的主启动类的全限定名,例如

       <build>
           <plugins>
               <plugin>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-maven-plugin</artifactId>
                   <configuration>
                       <mainClass>com.example.module.YourMainApplication</mainClass>
                   </configuration>
               </plugin>
           </plugins>
       </build>
       
bootJar {
   mainClassName = 'com.example.module.YourMainApplication'
}

方法四、模块依赖问题:

  • 检查是否有未解决的依赖问题,特别是那些可能影响到主启动类加载的依赖。
  • 确保所有必要的依赖都已正确声明并可用。

方法五、清理与重建:

  • 执行mvn clean install或gradlew clean build来清除旧的构建结果并重新构建。
  • 有时旧的构建工件或缓存数据可能会干扰新的构建过程。

通过以上步骤,应该能够定位并解决找不到主类的问题,从而成功地单独打包你的Spring Boot模块。

关于SpringBoot 多模块 无法自动装配Bean类型

1、在被引用模块中添加exec

2、增加扫描范围

@SpringBootApplication(scanBasePackages = {"com.xixi.web","com.xixi.dao"})
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

}

web模块引用dao模块,在web模块的时候就增加扫描范围到web和dao模块。

3、被引用模块需要Application启动入口

dao模块是被引用的,作为SpringBoot项目,入口是不能删除的。