關於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的基本框架最基本需要哪些東西,不要各種框架、插件用多了,忘記了最基本的構建方式和結構了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章