溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringBoot如何打成war包在tomcat或wildfly下運(yùn)行的方法

發(fā)布時(shí)間:2021-07-08 13:51:44 來(lái)源:億速云 閱讀:312 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了SpringBoot如何打成war包在tomcat或wildfly下運(yùn)行的方法,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“SpringBoot如何打成war包在tomcat或wildfly下運(yùn)行的方法”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI