解决IntelliJ IDEA执行maven打包,执行java -jar命令提示jar中没有主清单属性

简介: 执行`java -jar app.jar`命令后,提示jar中没有主清单属性

问题场景

IDEA执行mvn clean package -DskipTest=true命令或者借助工具的Maven菜单进行打包操作,然后执行java -jar app.jar命令后,提示jar中没有主清单属性


D:\WorkSpace\demo\target>java -jar demo-SNAPSHOT.jar
demo-SNAPSHOT.jar中没有主清单属性

原因分析

这个错误通常是由于生成的JAR文件缺少一个主清单属性引起的。在使用java -jar命令运行JAR文件时,JVM需要查找JAR文件中包含Main-Class属性的清单文件。如果没有找到这个属性,就会出现该错误。

验证分析

打开Jar包,查看其构建的jar目录,可以看到有一个MANIFEST.MF文件。该文件就是jar运行时要查找的清单目录,其中主清单数据,就是要运行的主类,即main函数入口所在的类

image.png

正常情况下,该清单文件内会有一个:

Main-Class:cn.ybzy.demo.mainDemo

解决方案

添加Main-Class

手动创建一个包含Main-Class清单属性的MANIFEST.MF文件,然后将其添加到JAR文件中

打开Jar包,在MANIFEST.MF文件中,添加Main-Class主类

Main-Class:cn.ybzy.demo.mainDemo

使用插件

1.使用maven-jar-plugin插件

在pom.xml文件中使用maven-jar-plugin插件,并在其中指定了<mainClass>属性。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.example.MainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

2.使用maven-shade-plugin插件

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.4</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>com.example.MainClass</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
相关文章
|
3月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
6天前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
18 3
|
4天前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
14 1
|
23天前
|
Java Windows
JAVA 常用的 DOS 命令
【10月更文挑战第15天】DOS 命令是 Java 开发中不可或缺的工具,掌握这些命令可以提高开发效率和操作便利性。
36 3
|
1月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
28 2
|
1月前
|
Java Devops 持续交付
Maven学习笔记(二):Maven基础(基于IDEA)
【10月更文挑战第1天】Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。上一篇简单介绍了Maven的基础知识,本文主要介绍IDEA上的实际使用场景。内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。仅供参考。
167 0
Maven学习笔记(二):Maven基础(基于IDEA)
|
1月前
|
运维 监控 Java
使用jps命令查看Java进程
`jps`是Java开发者和系统管理员的得力助手,它简化了Java进程监控的过程,使得快速检查应用运行状态变得轻而易举。通过合理利用其提供的参数,可以高效地进行故障排查、性能监控及日常管理任务,确保Java应用稳定运行。
59 2
|
2月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
51 5
|
1月前
|
Java 应用服务中间件 Maven
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
313 0
|
1月前
|
Java
Java 集合存在相同属性,其他元素累加
Java 集合存在相同属性,其他元素累加
28 0

推荐镜像

更多