温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringBoot如何打成war包在tomcat或wildfly下运行的方法

发布时间:2021-07-08 13:51:44 来源:亿速云 阅读:317 作者:小新 栏目:编程语言

这篇文章主要介绍了SpringBoot如何打成war包在tomcat或wildfly下运行的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

springboot默认的打包方式为jar包,jar包的有优点是不需要更改的配置,并且内嵌了tomcat,如果打成jar包直接可以丢到docker中运行测试。但是考虑到前端代码只能打成war包,因此干脆也将后端代码打成war包和前端的代码一起放在tomcat容器中的webapps中运行就好了。

SpringBoot打包形式

默认情况下,创建的SpringBoot项目是按照jar包形式来进行打包的。同时,内置了tomcat的容器。

那么,此时如果想让springboot打包成war包,并部署到wildfly等容器,该如何处理?

下面将从创建项目开始逐一讲解。

创建项目

创建项目没有什么难点,使用idea工具创建一个简单的maven项目即可,如果你的项目已经是springboot项目,想要修改为war包形式,对照修改即可。

修改pom.xml配置

创建项目之后,修改pom.xml文件,添加parent标签。

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.5.RELEASE</version>
  <relativePath/>
</parent>

如果原来是springboot项目,则已经包含了,不用修改。

pom.xml中设置打包方式为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的依赖。同时,添加servlet-api的依赖。注意这里添加的依赖为Servlet2.5。

在build中使用如下插件进行打包。

<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>

启动main方法

如果已经存在启动的main方法,则让main方法继承SpringBootServletInitializer,并实现其方法即可。如果是新创建项目,则直接在顶级目录创建SpringBootApp(启动类),然后启动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命令执行package打包即可,在target目录下即可生成war包。

至于tomcat和wildfly的部署,都可将war包放置于对应的目录下启动服务即可。

异常情况

如果在启动时报如类似如下异常(提示缺少web.xml):

Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)

注意检查pom文件打包插件和是否排除了tomcat的问题,核查上面的打包插件是否正确。

问题的原因是:springboot项目中引用了依赖包spring-boot-starter-web。该包中引用的spring-boot-starter-tomcat里包含了tomcat嵌入式servlet容器,其不同版本实现的是不同的servlet版本规范。

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,当没有web.xml文件时会出现上面的异常。

解决方式一:当Servlet版本小于3时,使用创建/src/main/webapp/WEB-INF/web.xml文件。

解决方式二:在pom.xml的build下添加maven-war-plugin插件。并设置failOnMissingWebXml为false。

感谢你能够认真阅读完这篇文章,希望小编分享的“SpringBoot如何打成war包在tomcat或wildfly下运行的方法”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI