解決java -jar XXX.jar沒有主清單屬性以及找不到或無法加載主類的問題
一、問題陳述
環(huán)境:
- Idea 2021
- jdk1.8
我的是spring boot項(xiàng)目,在pom文件是去掉了parent的標(biāo)簽,使用dependencyManagement標(biāo)簽對spring boot 依賴進(jìn)行管理。
idea上打包運(yùn)行java -jar gulimall-member-0.0.1-SNAPSHOT.jar
時,報沒有主清單屬性的錯誤,完整的報錯如下:
MrzhuangdeMacBook-Pro:target mrzhuang$ java -jar gulimall-member-0.0.1-SNAPSHOT.jar
gulimall-member-0.0.1-SNAPSHOT.jar中沒有主清單屬性
二、解決方法
可以參考:Maven指令打包SpringBoot項(xiàng)目提示沒有主清單文件
1、方法一(問題沒有真正解決)
查閱了網(wǎng)上的解決沒有主清單屬性
辦法
提醒:這種方法,對于我的問題沒有真正的解決,可能與項(xiàng)目的結(jié)構(gòu)有關(guān)。
1.1 點(diǎn)擊File -> Project Structure
1.1.1 依次點(diǎn)擊artifacts
-> “+
” -> JAR
-> From .....
1.1.2 選擇模塊和主類,注意下面的/main/java
需要去掉
,點(diǎn)擊OK
,然后點(diǎn)擊apply
。
1.2 點(diǎn)擊菜單欄Build -> Build Artifacts
1.2.1 選擇想要生成的jar包,點(diǎn)擊Build
最后在out文件夾中,成功生成了想要的jar包。
1.2.2 運(yùn)行jar包:
雖然解決了沒有主清單屬性
,但是我的又報另一個錯誤找不到或無法加載主類
。
MrzhuangdeMacBook-Pro:gulimall_member_jar mrzhuang$ java -jar gulimall-member.jar 錯誤: 找不到或無法加載主類。com.zhuang.gulimall.member.GulimallMemberApplication
1.3 解決找不到或無法加載主類
的方法
提示:此方法因項(xiàng)目的結(jié)構(gòu)而異。我的沒有解決!
1.3.1 在解決錯誤:找不到或無法加載主類
,也查閱了資料,更多的是在pom文件的mven插件中,增加如下的配置
<configuration> <mainClass>主類的相對路徑</mainClass> </configuration>
的配置。
整體的配置:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.zhuang.gulimall.member.GulimallMemberApplication</mainClass> </configuration> </plugin>
1.3.2 然后重新Build Artifacts,再次運(yùn)行out路徑下重新生成的jar包。
最終還是報了找不到或無法加載主類 com.zhuang.gulimall.member.GulimallMemberApplication
的錯誤。
2、方法二(最終解決了問題)
在pom文件的maven插件中增加如下的配置:
<executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions>
完整的:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
說明:spring-boot-maven插件的repackage(goal)有如下兩個作用:
1、在原始Maven打包形成的jar包基礎(chǔ)上,進(jìn)行重新打包,新形成的jar包不但包含應(yīng)用類文件和配置文件,而且還會包含應(yīng)用所依賴的jar包以及Springboot啟動相關(guān)類(loader等),以此來滿足Springboot獨(dú)立應(yīng)用的特性;
2、將原始Maven打包的jar重命名為XXX.jar.original作為原始文件;
對項(xiàng)目執(zhí)行 maven clean package
,可以看出在target文件中,生成了.jar包
以及.original
后綴的原始文件。
運(yùn)行生成的jar包:
可以看出成功運(yùn)行了?。?!
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java Bean與json對象間的轉(zhuǎn)換實(shí)例講解
在本篇文章里小編給大家整理的是關(guān)于java Bean與json間的轉(zhuǎn)換的實(shí)例內(nèi)容,有需要的朋友們吧可以學(xué)習(xí)參考下。2020-01-01Java通過jersey實(shí)現(xiàn)客戶端圖片上傳示例
本篇文章主要介紹了Java通過jersey實(shí)現(xiàn)客戶端圖片上傳示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03Java基于二叉查找樹實(shí)現(xiàn)排序功能示例
這篇文章主要介紹了Java基于二叉查找樹實(shí)現(xiàn)排序功能,結(jié)合實(shí)例形式分析了Java二叉查找樹的定義、遍歷及排序等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08