no main manifest attribute maven package 运行打包后的jar包报错:xxx.jar中没有主清单属性 通过配置 maven plugin 解决

命令行运行生成的jar包,报错

leung@wuyujin simple-webservice-server % java -jar target/sample-1.0-SNAPSHOT.jar 7896
target/sample-1.0-SNAPSHOT.jar中没有主清单属性

no main manifest attribute, in target/sample-1.0-SNAPSHOT.jar

错误原因:打包后的jar包中没有manifest文件,该文件有两行配置,关于jar包的启动类的全路径

解决

手动修复

只要手动编辑打包后jar包中的 META-INF/ 目录下的 MANIFEST.MF 文件即可。
在这里插入图片描述

修改打包规则 一劳永逸

你一定不想每次打包后,都手动修改一些文本的配置文件吧。

那就把这些规则打包后的启动类写在pom.xml中,maven 的 plugin 配置中。

  • 加maven plugin
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<version>3.0.2</version>
	<configuration>
		 <archive>
		  <manifest>
			   <addClasspath>true</addClasspath>
			   <classpathPrefix>lib/</classpathPrefix>
			   <mainClass>com.coffee.bee.Main</mainClass>
		  </manifest>
		 </archive>
	</configuration>
</plugin>

配置位置:
plugins 下
pluginManagement > plugins 下

之后每次打包都会自动将启动类的全路径写入 METAINF/MANIFEST.MF 文件。

MANIFEST.MF demo

某个应用,某次package后的MANIFEST.MF

在这里插入图片描述

Others

本问题是典型的由环境迁移导致的程序运行(启动)出错。

不知道你会不会有疑问:

我在本地使用IDE开发时,也没有做这些配置。但是程序是OK的。
WHY?

manifest.mf 文件中的启动类是jar包运行的前置条件,所以这一步一定要做。
开发时我们没做,只是因为IDE作为集成工具,自动帮我们完成了这一步

IDEA 中关于 main class 的配置

编辑应用运行的配置 Edit Configurations
在这里插入图片描述
填写主类Main class(这一步也可以下拉选择类)

在这里插入图片描述
甚至那你需要在这里设置。
当run过某个含main的类之后,IDEA会自动将该类初始化到 main class 的配置项。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值