SpringBoot中打war包需要注意事项
作者:Asurplus、 发布时间:2023-11-05 19:44:42
标签:SpringBoot,打war包
最近在做一个项目,遇到了项目打成 war 包的一个问题,项目创建时选择的时 jar 包方式,后因项目部署要求,需要打成 war 包部署,遇到很多坑,在此做一下记录
一、修改打包方式
原:
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
改后:
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
二、排除内置 Tomcat
原:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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>
使用 排除内置服务器
三、添加 Tomcat 依赖
用于编译和测试开发,两种方式
1、
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!-- 该包只在编译和测试的时候使用 -->
<scope>provided</scope>
</dependency>
2、
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>8.5.34</version>
<!-- 该包只在编译和测试的时候使用 -->
<scope>provided</scope>
</dependency>
四、改变项目的构造方式
原:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
改后:
<build>
<!-- 一般为你的项目名,与配置文件中的context-path保持一致 -->
<finalName>demo</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>src/main/resources/lib</directory>
<targetPath>WEB-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
五、修改启动类
启动类继承 SpringBootServletInitializer,并实现 configure() 方法
原:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
改后:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class DemoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
六、修改配置文件
修改 application.yml 文件,标明项目项目上下文路径 context-path
server:
servlet:
context-path: /demo
七、修改静态资源引入方式
我们使用 thymeleaf 模板引擎,引入 css、js 文件时,需要加上项目上下文路径
原:
<link rel="stylesheet" href="layui/css/layui.css" rel="external nofollow" media="all">
改后:
<link rel="stylesheet" th:href="@{/layui/css/layui.css}" rel="external nofollow" media="all">
我们需要使用 th:href="@{}" rel="external nofollow" 的方式,去引入静态资源文件
八、测试
我们可以不使用项目的启动类启动项目,我们自己添加一个服务器来启动项目
就想普通的 SSM 项目,添加一个 Tomcat 启动项目,如果能够成功启动项目,并能正常访问,那么打成 war 包也能够正常运行
来源:https://blog.csdn.net/qq_40065776/article/details/106752325


猜你喜欢
- 目录Fanout交换机模型RabbitMQ控制台操作新增两个队列绑定fanout交换机示例效果图核心代码消息发布消息订阅Fanout交换机模
- 功能描述上传照片文件名及是系统要识别标签或是照片的名称(人物标识)提取照片脸部特征值(调用 facemesh模型)保存特征值添加样本(调用
- 根据不同系统动态获取换行符和盘分割符1、获取盘分割符File.separator2、获取换行符windows系统为\r\n,Linux系统为
- 前言有些朋友可能是从事开发工作的时间不是特别的长,所以觉得Service相对与另外两个组件activity、broadcast receiv
- 代码很简单,这里就不多废话了。package cc.c;import android.app.Activity;import android
- 本文实例为大家分享了Android实现文字下方加横线的具体代码,供大家参考,具体内容如下public class WhiteTextview
- 本文中我将介绍一下我自己封装的一个小的工具类库:按钮点击事件类库。作用:该类库可以防止按钮重复点击,可以判断网络状态,可以判断用户登录状态,
- Android 注解Annotation相关文章:Android AOP注解Annotation详解(一)Android AOP之注解处理解
- 介绍什么是ThreadLocal?ThreadLocal叫做线程变量,用于在多线程环境下创建线程本地变量。通俗的讲,ThreadLocal可
- 这篇文章主要介绍了Spring整合Dubbo框架过程及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 目录概述LRU 的原理LRU 算法的实现LRU 算法描述LRU 算法代码实现方法一方法二方法三总结概述LRU 算法全称为 Least Rec
- 分页使用可以说非常普遍了,有时候会需要非常灵活的方式去开启或关闭分页,尝试使用一 * 解的方式来进行分页。依赖安装需要使用的依赖:Mybati
- 一个Maprduce程序主要包括三部分:Mapper类、Reducer类、执行类。Maven项目下所需依赖<dependencies&
- 这里介绍通过委托取消Button事件switch-case的方法。需要注意的是,事先要按顺序在各个Button的Tag属性中设置0、1、2、
- LockSupport 简介LockSupport 是 Java 并发编程中一个非常重要的组件,我们熟知的并发组件 Lock、线程池、Cou
- 一、系统介绍本系统实现扑克的分发,抢地主,电脑自动出牌等功能。二、系统展示1.扑克分发2.抢地主3.出牌4.游戏胜利三、系统实现Card.j
- 拆分实现流程请看下面这张图首先我们得对线程池进行一个功能拆分Thread Pool 就是我们的线程池,t1,t2,t3代表三个线程Block
- 时钟的使用1、声明VOID CALLBACK playproc( HWND hwnd, &nb
- Android * 功能/手机关闭能拍照效果如下: 其实 * 与偷录实现方式是一样的,都是使用到的WindowManager来绘制
- 从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是