springboot项目打war包,并部署到tomcat

yuan-qh      2022-05-08     585

关键词:

软件版本:

idea:2019.1 ultimate

springboot: 2.2.5

tomcat:9.0.31

一、修改默认打包方式,讲打包方式改为war

    <version>0.0.1-SNAPSHOT</version>
    <name>infocollection</name>
    <description>Demo project for Spring Boot</description>

    <!--在打包到生产环境Tomcat时指明打包方式-->
    <packaging>war</packaging>

二、排除springboot内置的tomcat的容器

为什么要排除springboot内置tomcat呢?

因为如果不排除内置的tomcat,当我们打成war包发布到生产环境的tomcat时,就会出现两个tomcat冲突的问题。为了避免不必要的麻烦,所以这里排除内置的tomcat。

这里有两种方式可供选择:

  1. 使用<exclusion>标签,排除springboot中的内置tomcat:

    <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>
  2. 添加tomcat依赖,并设置<scope>provided,用来覆盖springboot中的tomcat的<scope>:

    <!--当打war包到tomcat时,自动排除内置的tomcat,避免二者产生冲突-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。
                    相当于compile,但是打包阶段做了exclude操作-->
                <scope>provided</scope>
            </dependency>

这里虽然有两种方法,但是明眼人一眼就可以看出来,当然是选择第二种好一些,虽然两种操作都可以在打war包时成功吧内置tom猫排除,但是第二种操作可以在打war之后,不修改任何代码,还是可以继续修改代码,继续使用内置tomcat测试代码。所以这里墙裂推荐第二种方法。

在springboot的官方文档上也是介绍使用第二种方法。这是原话:The final step in the process is to ensure that the embedded servlet container does not interfere with the servlet container to which the war file is deployed. To do so, you need to mark the embedded servlet container dependency as being provided.

三、继承SpringBootServletInitializer类,并重写config方法

全称:org.springframework.boot.web.servlet.support.SpringBootServletInitializer,官方文档也有详细介绍为什么要继承。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

这里亲测,继承这个类之后,只是在部署war到生产环境时告诉tomcat自己的启动入口在哪。而如果你要修改代码并用内置tomcat测试,完全是不影响的,不用将代码还原回来。

四、端口,路径:

  1. 我们在application.properties或者在application.yml中对tomcat配置的portcontext-path对war文件是不起作用的,那个配置只对springboot内置的tomcat起作用。当我们把war部署到生产环境时,端口就是生产环境的端口,context-path就是war的文件名,或者自己在tomcat中配置的其他名字。

  2. 为了防止应用上下文所导致的项目访问资源加载不到的问题,

    建议pom.xml文件中<build></build>标签下添加<finalName></finalName>标签:

<build>
        <!--打war包到生产环境时配置-->
        <finalName>photoSystem</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

五、使用maven进行打包发布:

clean是清除之前的包,-Dmaven.test.skip=true是忽略测试代码

直接使用idea的maven插件进行打包发布:

技术图片

先进行clean清除target下面的文件,然后package将war包打包到target文件夹下。或者用install将war包打包到本地仓库中就好了。

六、结果:

技术图片

可以看到,这里有一个是war包,另一个是.original文件,其实这两个都是war包,把.original去掉,然后放到tomcat里面,照样可以运行。

其实他们两的区别就是,第一个war包里面的WEB-INF文件夹下有liblib-provided文件夹,lib-provided文件夹里面有spring中你排除的那个tomcat,所以war包也可以通过java -jar在命令行中启动。而.original中的WEB-INF下就只有lib文件夹,没有lib-provided文件夹。自然只能够通过tomcat来启动,而不能够通过命令行的java -jar来启动。所以我们在使用时,直接使用.war的文件就好了。

七、温馨提示:

建议springboot中的tomcat是什么版本,就在生成环境使用说明版本的tomcat,这样可以避免出现不必要的错误。

比如,现在的springboot内置的是tomcat9,而如果你把war丢到tomcat7 中运行,就会报错说找不到el-api.jar,这个其实不是tomcat7中没有这个jar包,而是tomcat9中的el-api.jar版本比较高,而tomcat7中不支持。

当然了,如果生产环境不允许的话,也可以把tomcat7中的lib进行调换即可。

这里最后放上springboot官方文档,直接讲述了如何发布war,有兴趣可以看看springboot传统发布方式

使用idea将springboot项目打war包部署到tomcat服务器上运行步骤详解(代码片段)

...到需要打war包部署到tomcat上运行的情景。   1.创建一个springboot项目,最原始的目录结构:  2.在pom文件中添加以下代码:使用packaging标签指定打包的方式位war包,添加build标签,指定一个上下文名,相当... 查看详情

springboot应用war包形式部署到外部tomcat

 SpringBoot应用默认打包成为可执行jar模式让我们感觉到部署的便捷,接下来给大家介绍一下SpringBoot项目打War包形式部署到外部Tomcat。修改原有项目1.修改项目打开项目,修改pom文件:1.项目中加入spring-boot-starter-web(如果是已... 查看详情

springboot项目打成war包,并部署到tomcat服务器

环境版本说明JDK13,tomcat9,springframework2.2.4.RELEASE一.pom文件修改将packaging中改成war二.排除内置的Tomcat容器<!--声明springboot内嵌tomcat的作用范围在运行时不起作用--><dependency><groupId>org.springframework.boot</grou 查看详情

springboot打war包部署,打jar包

官方文档:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file一:更改程序入口类Application.java使其继承SpringBootServletInitializer,并重写configure方法@SpringBootApplicati 查看详情

springboot项目打成war包部署到tomcat

...e依赖m1和m2,将m1和m2编译生成的jar包一起打成一个war包。springboot项目打成war包部署到tomcat时需要改变启动方式,否则运行tomcat时war包只会解压,但是加载不了package的Application.java文件内容:1importorg.springframework 查看详情

用idea打springboot项目war包(代码片段)

最近有个springboot项目要发布到独立的tomcat下运行,其中遇到了很多坑,在此记录下:1.springboot项目打包配置:首先在启动类目录下新增打包类备注:启动类继承自SpringBootServletInitializer方可正常部署至常规tomcat... 查看详情

springboot打war包,以及多个war包部署(代码片段)

一、springboot打war包1、修改pom.xml文件打包方式<groupId>com</groupId><artifactId>panshi</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><na 查看详情

springboot项目打成war包部署到服务器

   这是springboot学习的第二篇了,在上一篇已经整合了springboot项目了,如果还有小伙伴没有看得可以先去看第一篇    基础整合springboot项目    到这里的小伙伴应该都是会整合基本的springboo... 查看详情

使用idea对springboot项目打war包及遇到的问题总结(代码片段)

使用maven创建的springboot项目的默认打包方式是jar包,而且springboot是自带Tomcat的。部署项目时需要打包成对应的war包,并将项目部署到服务器的Tomcat下,所以项目打包时就需要修改一些配置。主要修改pom.xml文件中的一... 查看详情

docker打包springboot项目war包镜像并部署(代码片段)

docker事先有centos:7镜像,本地文件需要有一个war包和一个jdk压缩包docker可以自己添加本地镜像也可以拉取dockerpullcentos:7或dockerload-icentos_xxx.tar.gz1.创建文件夹/home/app/warimage2.把war包和jdk压缩包放在warimage下3.在warimage目录创建Docke... 查看详情

springboot使用war包部署到外部tomcat

如果是war包部署到外部tomcat,需要增加SpringBootServletInitializer子类,并重写其configure方法,或者将main函数所在的类继承SpringBootServletInitializer子类,并重写configure方法。@SpringBootApplication//继承SpringBootServletInitializer子类publicclassDe 查看详情

java之springboot入门到精通,springboot项目部署jar包方式,war包方式(一篇文章精通系列)(代码片段)

SpringBoot项目开发完毕后,支持两种方式部署到服务器:SpringBoot项目部署【jar包方式,war包方式】一、创建SpringBoot工程1、创建工程2、创建UserController二、jar包(官方推荐)1、打包2、运行jar包三、war包1、修改pom.xml的打包方式... 查看详情

springboot之打成war包部署到tomcat

  正常情况下SpringBoot项目是以jar包的形式,正常情况下SpringBoot项目是以jar包的形式,并且SpringBoot是内嵌Tomcat服务器,所以每次重新启动都是用的新的Tomcat服务器。正因如此,也出现了一个问题:  上传到项目的文... 查看详情

springbootmaven项目打jar包并部署到linux/windows服务(代码片段)

目录1、SpringBootmaven项目打包方式1.1 jar包优缺点1.2 war包优缺点2、SpringBootmaven项目打jar包2.1打完整jar包(包括lib)2.1.1 指定打包方式为jar2.1.2 添加打包插件plugin2.1.3打完整jar包(包括lib)2.2打不完整jar包(不... 查看详情

05_springboot打jar/war包解决第三方依赖jar包的问题

参考技术ASpringBoot+Maven的项目,有时候会遇到第三方jar包依赖Maven仓库。Maven有一种方式可以将本地的Jar包依赖到项目中而不需要先deploy到Maven库上。具体做法如下:上面就是SpringBoot项目部署时,打成jar包/war包时第三方依赖jar包的解... 查看详情

springbootmaven项目打jar包并部署到linux/windows服务(代码片段)

目录1、SpringBootmaven项目打包方式1.1 jar包优缺点1.2 war包优缺点2、SpringBootmaven项目打jar包2.1打完整jar包(包括lib)2.1.1 指定打包方式为jar2.1.2 添加打包插件plugin2.1.3打完整jar包(包括lib)2.2打不完整jar包(不... 查看详情

打war包

简单的就是用cmd命令打一个war包,首先eclipse将项目部署到tomcat中,然后用cmd命令进入到项目所在的目录,运行:jar-cvfxiangmu.war*.*  您要导出的项目上点击鼠标右键,选择【Export...】(1)选择【Web】下的【WARfile】选项(2... 查看详情

将springboot项目打成war包并部署到tomcat(代码片段)

当前环境:WindowsTomcat版本:tomcat8.5SpringBoot版本:2.2.31.pom.xml修改打包方式<packaging>war</packaging>2.加入SpringBoot打包插件(pom.xml)<build><plugins><plugi 查看详情