解决java -jar XXX.jar没有主清单属性以及找不到或无法加载主类的问题

 更新时间:2024年09月21日 09:07:06   作者:zhuang先森  
在使用Idea打包SpringBoot项目时,可能会遇到“没有主清单属性”的错误,问题原因是pom文件中缺少配置,未能正确打包成可执行的jar,解决方法包括:1. 修改项目结构并重新生成jar;2. 使用Maven插件在pom文件中添加spring-boot-maven-plugin配置

一、问题陈述

环境:

  • 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包:

可以看出成功运行了!!!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Rabbitmq消息推送功能实现示例

    Rabbitmq消息推送功能实现示例

    rabbitMQ为异步消息处理提出了一个很好的解决方案,它是一个非常好用的消息中间件。主要解决当生产者大量产生数据时,消费者无法快速消费的问题。这个时候需要一个中间层,保存这个数据,rabbitMQ是一个很好的解决方案
    2022-12-12
  • java Lombok之@Accessors用法及说明

    java Lombok之@Accessors用法及说明

    这篇文章主要介绍了java Lombok之@Accessors用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Eclipse 安装 SVN 在线插件教程

    Eclipse 安装 SVN 在线插件教程

    这篇文章主要介绍了Eclipse 安装 SVN 在线插件教程的相关资料,这里对安装步骤进行了详细介绍,需要的朋友可以参考下
    2016-11-11
  • Spring中的@ConditionalOnProperty注解使用详解

    Spring中的@ConditionalOnProperty注解使用详解

    这篇文章主要介绍了Spring中的@ConditionalOnProperty注解使用详解,在 spring boot 中有时候需要控制配置类是否生效,可以使用 @ConditionalOnProperty 注解来控制 @Configuration 是否生效,需要的朋友可以参考下
    2024-01-01
  • Spring和Hibernate的整合操作示例

    Spring和Hibernate的整合操作示例

    这篇文章主要介绍了Spring和Hibernate的整合操作,结合实例形式详细分析了Spring和Hibernate的整合具体步骤、实现方法及相关操作注意事项,需要的朋友可以参考下
    2020-01-01
  • Java异常处理机制深入理解

    Java异常处理机制深入理解

    如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器
    2022-01-01
  • log4j2 项目日志组件的实例代码

    log4j2 项目日志组件的实例代码

    下面小编就为大家分享一篇log4j2 项目日志组件的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java人民币小写转大写字符串的实现

    Java人民币小写转大写字符串的实现

    这篇文章主要介绍了Java人民币小写转大写字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • SpringBoot的@ControllerAdvice处理全局异常详解

    SpringBoot的@ControllerAdvice处理全局异常详解

    这篇文章主要介绍了SpringBoot的@ControllerAdvice处理全局异常详解,但有时却往往会产生一些bug,这时候就破坏了返回数据的一致性,导致调用者无法解析,所以我们常常会定义一个全局的异常拦截器,需要的朋友可以参考下
    2024-01-01
  • MyBatis-Plus UpdateWrapper 使用常见陷阱和解决方案

    MyBatis-Plus UpdateWrapper 使用常见陷阱和解决方案

    MyBatis-Plus是Mybatis的一个增强,简化了Mybatis的开发过程,不仅保持了Mybatis原有的功能,而且在无代码侵略下增加了许多的增强的功能,提供了丰富的CRUD操作,单表的CRUD操作无需编写SQL语句,本文介绍的是UpdateWrapper的常见陷阱和对应的解决方案,感兴趣的朋友一起看看吧
    2024-08-08

最新评论