- Unable to find main class
最近在做项目,使用是spring boot。做了一段时间想打包放到服务器上看看效果。于是使用maven命令进行打包。
出现了下面的错误。
Unable to find main class
原来spring boot项目使用maven打包,如果没有做配置的话,会自动寻找签名是public static void main(String[] args)的方法。
检查项目中是否有main方法并且main方法上是否有 @SpringBootApplication
注解。
mvn 会自动在项目中找main方法加入到jar中的主清单属性中。 如果没有没有找到main方法,当你打包的时候就会报错 "Unable to find main class"。
2.Unable to find a single main class
当项目中多个class存在main方法,结果提示另外的错误:
Unable to find a single main class
检查项目中是否有多个main方法
如果项目中存在多个main方法,mvn会不知道你究竟想要用哪个main方法作为jar包的清单属性 所以这个时候你必须要在pom.xml文件中指定一个 mainClass
如果项目中存在多个main方法,mvn会不知道你究竟想要用哪个main方法作为jar包的清单属性 所以这个时候你必须要在pom.xml文件中指定一个 mainClass <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.**.**.testApplication</mainClass> </configuration> </plugin> </plugins> </build>
mvn 之所以能找到项目中的main方法,是因为mvn有一套自己的项目结构 例如: source (源码) 目录: /src/main/java resources (所需资源) 目录: /src/main/resources 所以需要检查我们的项目结构是否是按照maven的默认项目结构的标准 在IDEA中,如果项目结构不是这种默认的结构的话,我们需要在IDEA中指定source或resources目录 如果已经按照这种默认项目结构的标准导入IDEA是不需要手动指定source的 同理,如果不按照这种默认标准创建项目mvn默认也不认识项目中的source 所以我们也可以通过如下配置指定source和resource目录 <build> <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.**.**.testApplication</mainClass> </configuration> </plugin> </plugins> </build> 但是不推荐修改默认的项目结构,还是推荐使用maven提供的默认项目结构来创建项目
3.Maven多模块打包遇到的问题
多模块打包时,子模块提示找不到main class,有人说直接在子模块加上mainclass就好了,可是往往打的是dao层的包,他就是一个jar,不是一个可执行程序,本来就没有入口class。那该如何设置呢?
其实很简单,只需要在子模块中添加:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin>
配置添加,设置过滤即可。