久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Boot Maven Plugin打包異常解決方案

瀏覽:49日期:2023-07-31 16:38:58

【背景】spring-boot項目,打包成可執(zhí)行jar,項目內(nèi)有兩個帶有main方法的類并且都使用了@SpringBootApplication注解(或者另一種情形:你有兩個main方法并且所在類都沒有使用@SpringBootApplication注解),pom.xml如下

<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.5.3.RELEASE</version> <executions> <execution> <goals><goal>repackage</goal> </goals> </execution> </executions></plugin>

【問題】

執(zhí)行mvn clean package,報錯如下(說點不相關(guān)的,使用install同理。因為spring-boot:repackage目標(biāo)(goal)(下文會說)被綁定在package構(gòu)建階段(phases),而package階段在install階段之前,指定構(gòu)建階段之前的階段都會執(zhí)行。詳細(xì)參見:Introduction to the Build Lifecycle)

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.3.RELEASE:repackage (default) on project webapps-api-bid: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.3.RELEASE:repackage failed: Unable to find a single main class from the following candidates [com.xx.api.main.ApiBidMain, com.xx.webapps.api.main.WebappsApiBidMain]

執(zhí)行mvn clean package spring-boot:repackage,報錯如下,不如上面日志詳細(xì)

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.3.RELEASE:repackage (default) on project webapps-api-bid: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.3.RELEASE:repackage failed: Unable to find main class

【解決】

Note:參考官網(wǎng)描述,沒有指定<mainClass>或者繼承了spring-boot-starter-parent并且<start-class>屬性未配置時,會自動尋找簽名是public static void main(String[] args)的方法... 所以插件懵逼了,兩個妹子和誰在一起呢...

[推薦] 通用解決方法:<configuration>下配置mainClass,指定程序入口。

<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.5.3.RELEASE</version> <configuration> <mainClass>com.xx.webapps.api.main.WebappsApiBidMain</mainClass> </configuration> <executions> <execution> <goals><goal>repackage</goal> </goals> </execution> </executions></plugin>

Spring Boot Maven Plugin提供了幾個目標(biāo)(goal),我們在<executions>標(biāo)簽里配置的<goal>repackage</goal>對應(yīng)spring-boot:repackage這個目標(biāo)。

repackage: create a jar or war file that is auto-executable. It can replace the regular artifact or can be attached to the build lifecyle with a separate classifier. run: run your Spring Boot application with several options to pass parameters to it. start and stop: integrate your Spring Boot application to the integration-test phase so that the application starts before it.

The plugin rewrites your manifest, and in particular it manages theMain-ClassandStart-Classentries, so if the defaults don’t work you have to configure those there (not in the jar plugin). TheMain-Classin the manifest is actually controlled by thelayoutproperty of the boot plugin

[譯] 該插件重寫了清單文件(MANIFEST.MF,也就是jar里面的清單文件),此文件管理著主類(Main-Class)和開始類(Start-Class)入口。清單文件中的Main-Class由layout控制

這里的Start-Class就是我們配置的<mainClass>,而Main-Class受layout屬性的控制,別被名字搞亂了(是不是很詭異?看看解決方法二就明白為啥如此詭異了).... 來張圖直觀的感受下,對應(yīng)使用上面xml配置打包后的清單文件(MANIFEST.MF):

Spring Boot Maven Plugin打包異常解決方案

layout屬性默認(rèn)不需要配置,插件會自動推斷。不同的layout屬性清單文件里面的Main-Class也會相應(yīng)的不同。比如layout不配置或者配置為JAR對應(yīng)的Main-Class是JarLauncher,layout配置為WAR對應(yīng)的Main-Class是WarLauncher。

[有限制條件]解決方法二:如果你的pom繼承自spring-boot-starter-parent(注意此前提),也可以直接在<properties>配置<start-class>(其實這里的start-class直接對應(yīng)清單文件里的Start-Class):

<properties> <start-class>com.xx.webapps.api.main.WebappsApiBidMain</start-class></properties>

解決方法三:打包的的時候注釋掉其他的@SpringBootApplication... 或者你有兩處main方法并且都沒有使用@SpringBootApplication注解,注釋掉一個main方法..... 這就是第三種解決方法233333

【隨便說說】

說說spring-boot:repackage這個目標(biāo)。Spring Boot Maven Plugin這個插件包含一系列目標(biāo)(goal),我們在<executions>標(biāo)簽里配置的<goal>repackage</goal>對應(yīng)spring-boot:repackage這個目標(biāo),看下官方介紹:

spring-boot:repackage repackages your jar/war to be executable.

Repackages existing JAR and WAR archives so that they can be executed from the command line using java -jar. Withlayout=NONEcan also be used simply to package a JAR with nested dependencies (and no main class, so not executable).

簡單點說,這貨重新打包個可執(zhí)行的jar/war,可以在命令行使用-jar執(zhí)行。如果指定layout為NONE那就沒有主類只是打個普通的jar(不可執(zhí)行),一般不會這么做。

一般情況,這個目標(biāo)會打一個新的jar/war,并把maven默認(rèn)打的jar/war添加.original后綴,在target目錄下可以看到:

Spring Boot Maven Plugin打包異常解決方案

【參考】

1.https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

2.https://docs.spring.io/spring-boot/docs/2.0.0.BUILD-SNAPSHOT/maven-plugin//repackage-mojo.html

3.https://stackoverflow.com/questions/23217002/how-do-i-tell-spring-boot-which-main-class-to-use-for-the-executable-jar

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 中文字幕欧美日韩 | 久久久久国产 | 天天操天天干天天插 | 婷婷国产在线观看 | 天天操夜夜爽 | 伊人短视频 | 亚洲激情在线 | 在线成人免费观看www | 欧美一区二区三区视频在线观看 | 欧美视频精品 | 在线观看中文字幕亚洲 | 日韩中文字幕在线视频 | 91在线资源 | 久久人人网 | 国产在线一区二区 | 精品中文一区 | 免费一级欧美在线观看视频 | 久久精品在线观看视频 | 狠狠爱天天操 | 龙珠z普通话国语版在线观看 | 日韩精品免费在线观看 | 国产成人免费视频 | 国产精品久久久久久亚洲影视 | 日韩激情一区二区三区 | 国产美女中出 | 日韩在线中文字幕 | 99re久久 | 免费一级黄色电影 | 国产精品美女久久久久久久久久久 | 久久久www成人免费无遮挡大片 | 午夜av影视 | 91在线看视频 | youjizz欧美 | 日韩一区在线视频 | 噜噜噜在线观看免费视频日本 | 成人精品视频 | 欧美精品一二三区 | 中文字幕一级 | 日韩成人在线观看 | 欧美成人在线影院 | 一区二区精品在线观看 |