本篇內(nèi)容主要講解“SpringBoot怎么打成war包在tomcat或wildfly下運(yùn)行”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“SpringBoot怎么打成war包在tomcat或wildfly下運(yùn)行”吧!
目前創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、青羊網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
springboot默認(rèn)的打包方式為jar包,jar包的有優(yōu)點(diǎn)是不需要更改的配置,并且內(nèi)嵌了tomcat,如果打成jar包直接可以丟到docker中運(yùn)行測試。但是考慮到前端代碼只能打成war包,因此干脆也將后端代碼打成war包和前端的代碼一起放在tomcat容器中的webapps中運(yùn)行就好了。
SpringBoot打包形式
默認(rèn)情況下,創(chuàng)建的SpringBoot項(xiàng)目是按照jar包形式來進(jìn)行打包的。同時(shí),內(nèi)置了tomcat的容器。
那么,此時(shí)如果想讓springboot打包成war包,并部署到wildfly等容器,該如何處理?
下面將從創(chuàng)建項(xiàng)目開始逐一講解。
創(chuàng)建項(xiàng)目
創(chuàng)建項(xiàng)目沒有什么難點(diǎn),使用idea工具創(chuàng)建一個(gè)簡單的maven項(xiàng)目即可,如果你的項(xiàng)目已經(jīng)是springboot項(xiàng)目,想要修改為war包形式,對照修改即可。
修改pom.xml配置
創(chuàng)建項(xiàng)目之后,修改pom.xml文件,添加parent標(biāo)簽。
org.springframework.boot spring-boot-starter-parent 2.1.5.RELEASE
如果原來是springboot項(xiàng)目,則已經(jīng)包含了,不用修改。
pom.xml中設(shè)置打包方式為war。
添加或修改dependency配置,如下:
org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat javax.servlet servlet-api 2.5 org.springframework.boot spring-boot-starter-test test
其中在spring-boot-starter-web中需要排除tomcat的依賴。同時(shí),添加servlet-api的依賴。注意這里添加的依賴為Servlet2.5。
在build中使用如下插件進(jìn)行打包。
org.apache.maven.plugins maven-war-plugin 2.6 false
啟動(dòng)main方法
如果已經(jīng)存在啟動(dòng)的main方法,則讓main方法繼承SpringBootServletInitializer,并實(shí)現(xiàn)其方法即可。如果是新創(chuàng)建項(xiàng)目,則直接在頂級(jí)目錄創(chuàng)建SpringBootApp(啟動(dòng)類),然后啟動(dòng)diam如下。
@SpringBootApplication public class SpringBootApp extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(SpringBootApp.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(SpringBootApp.class); } }
打包
通過maven命令執(zhí)行package打包即可,在target目錄下即可生成war包。
至于tomcat和wildfly的部署,都可將war包放置于對應(yīng)的目錄下啟動(dòng)服務(wù)即可。
異常情況
如果在啟動(dòng)時(shí)報(bào)如類似如下異常(提示缺少web.xml):
Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
注意檢查pom文件打包插件和是否排除了tomcat的問題,核查上面的打包插件是否正確。
問題的原因是:springboot項(xiàng)目中引用了依賴包spring-boot-starter-web。該包中引用的spring-boot-starter-tomcat里包含了tomcat嵌入式servlet容器,其不同版本實(shí)現(xiàn)的是不同的servlet版本規(guī)范。
Servlet/JSP版本2.5/2.1支持Tomcat的版本為6.0.x,最低java版本為1.5。Servlet/JSP版本3.0/2.2支持Tomcat的版本為7.0.x,最低java版本為1.6。
由于上面使用了Servlet2.5,當(dāng)沒有web.xml文件時(shí)會(huì)出現(xiàn)上面的異常。
解決方式一:當(dāng)Servlet版本小于3時(shí),使用創(chuàng)建/src/main/webapp/WEB-INF/web.xml文件。
解決方式二:在pom.xml的build下添加maven-war-plugin插件。并設(shè)置failOnMissingWebXml為false。
到此,相信大家對“SpringBoot怎么打成war包在tomcat或wildfly下運(yùn)行”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!