问题场景
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>
版权归原作者 CodeDevMaster 所有, 如有侵权,请联系我们删除。