Maven指令打包SpringBoot項(xiàng)目提示沒(méi)有主清單文件問(wèn)題
Maven指令打包SpringBoot項(xiàng)目提示沒(méi)有主清單文件
項(xiàng)目打包為Jar后
通過(guò)java -jar xxxxx.jar運(yùn)行時(shí)提示xxxxx.jar中沒(méi)有主清單屬性,如下:
打開(kāi)jar包
META-INF目錄下的MANIFEST.MF,內(nèi)容如下:
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: greedystar Created-By: Apache Maven 3.2.5 Build-Jdk: 1.8.0_181
我們發(fā)現(xiàn)這里沒(méi)有主類等信息,是什么原因?qū)е碌哪兀?/p>
網(wǎng)上大多數(shù)資料指出需要在pom.xml中配置maven插件,如下:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
這種解決方案通常可以解決大部分問(wèn)題,但這種方案只在使用 spring-boot-starter-parent 為 <parent/> 標(biāo)簽內(nèi)容時(shí)才有效,當(dāng)我們使用自定義的<parent/>節(jié)點(diǎn)時(shí)按如上所述的方式配置maven插件則是無(wú)效的,這是為什么呢?讓我們一起看一看 spring-boot-starter-parent 中的配置。
spring-boot-starter-parent 中maven插件的配置如下:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <mainClass>${start-class}</mainClass> </configuration> </plugin>
我們可以看到這里配置了主類信息以及一個(gè)重要的標(biāo)簽<goal>,對(duì)repackage的描述如下:
Repackages existing JAR and WAR archives so that they can be executed from the command line using java -jar.
看到這里我們就清楚了,當(dāng)使用自定義的 parent 時(shí),我們需要自行配置maven插件的<goal>屬性,如下:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
指定mvn clean package指令打包jar包后看一下清單文件
內(nèi)容如下:
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: greedystar Start-Class: cn.bimart.scf.bc.tx.server.TxServerApplication Spring-Boot-Classes: BOOT-INF/classes/ Spring-Boot-Lib: BOOT-INF/lib/ Spring-Boot-Version: 2.1.1.RELEASE Created-By: Apache Maven 3.2.5 Build-Jdk: 1.8.0_181 Main-Class: org.springframework.boot.loader.JarLauncher
這樣項(xiàng)目就打包成功了,通過(guò)java -jar也可以正確運(yùn)行了。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java比較兩個(gè)list是否相同equals的代碼詳解
在本篇文章里小編給大家分享的是關(guān)于java比較兩個(gè)list是否相同equals的代碼詳解,有需要的朋友們可以參考學(xué)習(xí)下。2020-02-02MybatisPlus實(shí)現(xiàn)對(duì)象嵌套關(guān)聯(lián)查詢一對(duì)多List集合查詢
這篇文章主要介紹了MybatisPlus實(shí)現(xiàn)對(duì)象嵌套關(guān)聯(lián)查詢一對(duì)多List集合查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Java微信公眾平臺(tái)開(kāi)發(fā)(4) 回復(fù)消息的分類及實(shí)體的創(chuàng)建
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開(kāi)發(fā)第四步,回復(fù)消息的分類及實(shí)體的創(chuàng)建,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Java基礎(chǔ)之switch分支結(jié)構(gòu)詳解
這篇文章主要介紹了Java基礎(chǔ)之switch分支結(jié)構(gòu)詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很大的幫助,需要的朋友可以參考下2021-05-05Java實(shí)現(xiàn)AOP面向切面編程的實(shí)例教程
這篇文章主要介紹了Java實(shí)現(xiàn)AOP面向切面編程的實(shí)例教程,通常Java中的AOP都是利用Spring框架中造好的輪子來(lái)開(kāi)發(fā),而本文則關(guān)注于Java本身AOP的設(shè)計(jì)模式實(shí)現(xiàn),需要的朋友可以參考下2016-04-04