关于SpringBoot项目Linux运行报错:no main manifest attribute, in xxx.jar 没有主清单属性

问题背景

先说一下背景:
其一,公司使用的云主机,无法连接外网,所以无法直接创建SpringBoot项目!
其二,我是🐷,这是用来记录自己蠢到家的一篇文章

最近在工作中的一个新项目遇到了SpringBoot打jar包到服务器上无法执行,打包的时候就感觉jar包也太小了吧,而且还没有xxx.jar.original的文件同时生成,而且一运行就提示没有主类的问题

no main manifest attribute, in xxx.jar

下图为我在mac上运行的结果,为了问题重现而已,在linux会报最上面一行的错误,意思都是一样的
在mac上运行问题重现演示

但是在本地Idea中可以正常运行,而且,讲道理来说SpringBoot项目打包明明可以直接运行,而且之前SpringBoot项目也是这么运行的都没问题啊,为啥服务器上运行就找不到主类呢?

真的是百思不得其姐,于是百度了一下,发现了几种解决办法:

解决方法一(PASS)

使用 java -cp jar包位置 启动类全类名 ,如:

java -cp /data/testDemo.jar com.rayacai.Application

但是这也只能临时的指定路径让项目跑起来,这明明已经是另一种启动方式了,并没有彻底解决
再说,我也不可能将一个“正常”的SpringBoot项目以这种方式来进行每次服务器的部署啊!
于是,又开始寻找另一个方法…

解决方法二(PASS)

在某一篇文章里找到了这段代码,于是被我直接拉了过来
想在本地试一下,结果…直接原地爆炸!

<build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
          <configuration>
            <archive>
              <manifest>
                <mainClass>com.sf.App</mainClass>
              </manifest>
            </archive>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
 </build>

发生了什么情况呢?
我的程序maven依赖包错,删除此build标签后,依赖不报错了,可以clean,但是无法package,发现是编译问题
于是我的项目现在连build/rebuild重新编译都无法通过
报错找不到所有的mapper的xml文件
再到文件夹中查看,target文件夹拒绝访问,无法删除

心想,完了,这特么弄个主类把项目都弄炸了还得重新从svn上拉下来再把新代码搞过去
后来想着死马当活马医,重启一下吧

target无法删除问题解决!!!!!!

重启后,那个无法删除的target文件夹已经自动消失了,可以编译和正常启动了,这段代码也就没敢再试,PASS!

解决方法三(BINGO)

这时候陷入了僵局
开始和其他SpringBoot项目比对<dependency>,因为是手动maven创建的项目,之后才引入的SpringBoot的相关依赖,所以总以为是依赖少引入了
后来想到的是少写注解啥的了,又开始找注解的问题…

其实在这个过程中有发现jar包中的META-INF文件夹下的MANIFEST.MF中没有主类MainClass,但是没有找到原因,为什么会没有…
在这里插入图片描述
后来突然想到方法二的build标签思路是不是对的?

就比对了其他SpringBoot项目中的pom.xml才发现,原来SpringBoot项目是要有build标签的
但是内容只有这几行

	<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

看到这我也知道自己蠢,为啥没早进行比对呢

其实我也早对比了,但是就没想到build这块,一直在对比依赖部分
(好吧,其实我就是蠢!!!)

加上这个build标签后,该有的东西都有了,完美解决!!!!

在这里插入图片描述

后记

对于SpringBoot平时对于自己写练习的时候都是插件直接联网在线创建,而且在公司里也都是在现有项目中进行业务逻辑开发,不会说用maven手动搭建SpringBoot的项目
像我们这种开发环境禁止联网只能手动创建maven新项目再引入SpringBoot依赖的情况也是极少数了
但是,这次也是给个教训,记一下SpringBoot的基本框架最基本需要哪些东西,不要各种框架、插件用多了,忘记了最基本的构建方式和结构了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值