解决java -jar XXX.jar没有主清单属性以及找不到或无法加载主类的问题
一、问题陈述
环境:
- Idea 2021
- jdk1.8
我的是spring boot项目,在pom文件是去掉了parent的标签,使用dependencyManagement标签对spring boot 依赖进行管理。
idea上打包运行java -jar gulimall-member-0.0.1-SNAPSHOT.jar
时,报没有主清单属性的错误,完整的报错如下:
MrzhuangdeMacBook-Pro:target mrzhuang$ java -jar gulimall-member-0.0.1-SNAPSHOT.jar
gulimall-member-0.0.1-SNAPSHOT.jar中没有主清单属性
二、解决方法
可以参考:Maven指令打包SpringBoot项目提示没有主清单文件
1、方法一(问题没有真正解决)
查阅了网上的解决没有主清单属性
办法
提醒:这种方法,对于我的问题没有真正的解决,可能与项目的结构有关。
1.1 点击File -> Project Structure
1.1.1 依次点击artifacts
-> “+
” -> JAR
-> From .....
1.1.2 选择模块和主类,注意下面的/main/java
需要去掉
,点击OK
,然后点击apply
。
1.2 点击菜单栏Build -> Build Artifacts
1.2.1 选择想要生成的jar包,点击Build
最后在out文件夹中,成功生成了想要的jar包。
1.2.2 运行jar包:
虽然解决了没有主清单属性
,但是我的又报另一个错误找不到或无法加载主类
。
MrzhuangdeMacBook-Pro:gulimall_member_jar mrzhuang$ java -jar gulimall-member.jar 错误: 找不到或无法加载主类。com.zhuang.gulimall.member.GulimallMemberApplication
1.3 解决找不到或无法加载主类
的方法
提示:此方法因项目的结构而异。我的没有解决!
1.3.1 在解决错误:找不到或无法加载主类
,也查阅了资料,更多的是在pom文件的mven插件中,增加如下的配置
<configuration> <mainClass>主类的相对路径</mainClass> </configuration>
的配置。
整体的配置:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.zhuang.gulimall.member.GulimallMemberApplication</mainClass> </configuration> </plugin>
1.3.2 然后重新Build Artifacts,再次运行out路径下重新生成的jar包。
最终还是报了找不到或无法加载主类 com.zhuang.gulimall.member.GulimallMemberApplication
的错误。
2、方法二(最终解决了问题)
在pom文件的maven插件中增加如下的配置:
<executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions>
完整的:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
说明:spring-boot-maven插件的repackage(goal)有如下两个作用:
1、在原始Maven打包形成的jar包基础上,进行重新打包,新形成的jar包不但包含应用类文件和配置文件,而且还会包含应用所依赖的jar包以及Springboot启动相关类(loader等),以此来满足Springboot独立应用的特性;
2、将原始Maven打包的jar重命名为XXX.jar.original作为原始文件;
对项目执行 maven clean package
,可以看出在target文件中,生成了.jar包
以及.original
后缀的原始文件。
运行生成的jar包:
可以看出成功运行了!!!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring中的@ConditionalOnProperty注解使用详解
这篇文章主要介绍了Spring中的@ConditionalOnProperty注解使用详解,在 spring boot 中有时候需要控制配置类是否生效,可以使用 @ConditionalOnProperty 注解来控制 @Configuration 是否生效,需要的朋友可以参考下2024-01-01SpringBoot的@ControllerAdvice处理全局异常详解
这篇文章主要介绍了SpringBoot的@ControllerAdvice处理全局异常详解,但有时却往往会产生一些bug,这时候就破坏了返回数据的一致性,导致调用者无法解析,所以我们常常会定义一个全局的异常拦截器,需要的朋友可以参考下2024-01-01MyBatis-Plus UpdateWrapper 使用常见陷阱和解决方案
MyBatis-Plus是Mybatis的一个增强,简化了Mybatis的开发过程,不仅保持了Mybatis原有的功能,而且在无代码侵略下增加了许多的增强的功能,提供了丰富的CRUD操作,单表的CRUD操作无需编写SQL语句,本文介绍的是UpdateWrapper的常见陷阱和对应的解决方案,感兴趣的朋友一起看看吧2024-08-08
最新评论