0
点赞
收藏
分享

微信扫一扫

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

灯火南山 2023-09-23 阅读 7

问题场景

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函数入口所在的类

在这里插入图片描述 正常情况下,该清单文件内会有一个:

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>
举报

相关推荐

0 条评论