SpringBoot打成war包在tomcat或wildfly下運(yùn)行的方法
springboot默認(rèn)的打包方式為jar包,jar包的有優(yōu)點(diǎn)是不需要更改的配置,并且內(nèi)嵌了tomcat,如果打成jar包直接可以丟到docker中運(yùn)行測(cè)試。但是考慮到前端代碼只能打成war包,因此干脆也將后端代碼打成war包和前端的代碼一起放在tomcat容器中的webapps中運(yùn)行就好了。
SpringBoot打包形式
默認(rèn)情況下,創(chuàng)建的SpringBoot項(xiàng)目是按照jar包形式來(lái)進(jìn)行打包的。同時(shí),內(nèi)置了tomcat的容器。
那么,此時(shí)如果想讓springboot打包成war包,并部署到wildfly等容器,該如何處理?
下面將從創(chuàng)建項(xiàng)目開(kāi)始逐一講解。
創(chuàng)建項(xiàng)目
創(chuàng)建項(xiàng)目沒(méi)有什么難點(diǎn),使用idea工具創(chuàng)建一個(gè)簡(jiǎn)單的maven項(xiàng)目即可,如果你的項(xiàng)目已經(jīng)是springboot項(xiàng)目,想要修改為war包形式,對(duì)照修改即可。
修改pom.xml配置
創(chuàng)建項(xiàng)目之后,修改pom.xml文件,添加parent標(biāo)簽。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath/> </parent>
如果原來(lái)是springboot項(xiàng)目,則已經(jīng)包含了,不用修改。
pom.xml中設(shè)置打包方式為war。
<packaging>war</packaging>
添加或修改dependency配置,如下:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
其中在spring-boot-starter-web中需要排除tomcat的依賴(lài)。同時(shí),添加servlet-api的依賴(lài)。注意這里添加的依賴(lài)為Servlet2.5。
在build中使用如下插件進(jìn)行打包。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
啟動(dòng)main方法
如果已經(jīng)存在啟動(dòng)的main方法,則讓main方法繼承SpringBootServletInitializer,并實(shí)現(xiàn)其方法即可。如果是新創(chuàng)建項(xiàng)目,則直接在頂級(jí)目錄創(chuàng)建SpringBootApp(啟動(dòng)類(lèi)),然后啟動(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); } }
打包
通過(guò)maven命令執(zhí)行package打包即可,在target目錄下即可生成war包。
至于tomcat和wildfly的部署,都可將war包放置于對(duì)應(yīng)的目錄下啟動(dòng)服務(wù)即可。
異常情況
如果在啟動(dòng)時(shí)報(bào)如類(lèi)似如下異常(提示缺少web.xml):
Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
注意檢查pom文件打包插件和是否排除了tomcat的問(wèn)題,核查上面的打包插件是否正確。
問(wèn)題的原因是:springboot項(xiàng)目中引用了依賴(lài)包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)沒(méi)有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。
總結(jié)
以上所述是小編給大家介紹的SpringBoot打成war包在tomcat或wildfly下運(yùn)行的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- centos環(huán)境下使用tomcat 部署SpringBoot的war包
- docker安裝tomcat并部署Springboot項(xiàng)目war包的方法
- Tomcat啟動(dòng)springboot項(xiàng)目war包報(bào)錯(cuò):?jiǎn)?dòng)子級(jí)時(shí)出錯(cuò)的問(wèn)題
- eclipse springboot工程打war包方法及再Tomcat中運(yùn)行的方法
- SpringBoot應(yīng)用War包形式部署到外部Tomcat的方法
- SpringBoot war包部署到Tomcat服務(wù)器
- Springboot打成war包并在tomcat中運(yùn)行的部署方法
- springboot項(xiàng)目打成war包部署到tomcat遇到的一些問(wèn)題
- Tomcat部署SpringBoot項(xiàng)目的war包的方法及詳細(xì)步驟
相關(guān)文章
springboot 整合fluent mybatis的過(guò)程,看這篇夠了
這篇文章主要介紹了springboot 整合fluent mybatis的過(guò)程,配置數(shù)據(jù)庫(kù)連接創(chuàng)建數(shù)據(jù)庫(kù)的詳細(xì)代碼,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08Java的IO流實(shí)現(xiàn)文件和文件夾的復(fù)制
這篇文章主要為大家詳細(xì)介紹了Java的IO流實(shí)現(xiàn)文件和文件夾的復(fù)制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06Spring動(dòng)態(tài)代理實(shí)現(xiàn)日志功能詳解
這篇文章主要為大家詳細(xì)介紹了Spring動(dòng)態(tài)代理實(shí)現(xiàn)日志功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08SpringBoot利用validation實(shí)現(xiàn)優(yōu)雅的校驗(yàn)參數(shù)
數(shù)據(jù)的校驗(yàn)是交互式網(wǎng)站一個(gè)不可或缺的功能,如果數(shù)據(jù)庫(kù)中出現(xiàn)一個(gè)非法的郵箱格式,會(huì)讓運(yùn)維人員頭疼不已。本文將介紹如何利用validation來(lái)對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-06-06