若依4.8.1打包war后在Tomcat无法运行,404报错的一个解决方法

背景

最近使用若依4.8.1进行二次开发,接着尝试打包成war包进行部署,结果出现了404,提示“HTTP状态 404 - 未找到,请求的资源[/ruoyi-admin/]不可用”,翻了网上的教程,包括看了官方的解疑都没有说到该情况。最后经过尝试,发现了是Tomcat的版本不对无法运行。

若依打包war教程

由于的主要目的是从jar到war的过渡,因此把这个过程也记录下来,不需要的朋友可以跳过。

jar包运行

项目在开发的过程中,打包为jar包是可以运行的。打包的时候使用maven的package即可,打包出ruoyi-admin.jar,使用命令可以正常运行。

java -jar ruoyi-admin.jar

在使用过程中,假如出现中文乱码,可以在运行程序前使用命令:

chcp 65001

运行结果这里就不截图了哈。

修改打包为war

从官网教程中,打包war只需要在ruoyi-admin/pom.xml中,修改<packaging>jar</packaging>为<packaging>war</packaging>即可,如图

不过我改了这里之后,在最后打包的时候,ruoyi-admin失败了。

这个问题我找了maven失败的原因,最后发现是maven的war插件版本导致的,所以我这里将maven-war-plugin的<version>3.0.0</version>改为了<version>3.4.0</version>,最后成功打包出war包。

移除嵌入式tomcat插件

在官网和有关的教程中,还提到移除嵌入式tomcat插件,这里我刚好进行了尝试,其实移不移除都可以运行,只不过打包后多了4M的程序包罢了。

        <!-- SpringBoot Web容器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 移除嵌入式tomcat插件 --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency>

Tomcat部署

Tomcat11中部署

随后我把ruoyi-admin.war放在apache-tomcat-11.0.9的webapps目录,tomcat已经部署成功,但是不可访问。

到了这一步,查了许多文档,包括官网针对这个问题的答复,似乎都没有什么问题,知道我看了一个回答,灵光一闪想到是不是Tomcat版本的原因呢。因为在Tomcat控制台中,有提示到ruoyi-admin已经部署完成,但是没有看到熟悉的若依启动界面。正好我的电脑有个Tomcat9,可以用来测试一下。

Tomcat9中部署

同样的,把war包放到apache-tomcat-9.0.86/webapps路径下,再启动tomcat,这次发现除了提示部署完成,还直接把熟悉的若依启动页面加载出来了,说明这次是真的可以启动了。

我Tomcat9的启动端口是8088,现在访问若依地址,正常访问!

http://localhost:8088/ruoyi-admin/

原因分析

可以使用了之后,我看了启动日志,发现我使用的Tomcat11,使用的java21,而Tomcat9使用的Java8,日志分别如下:

Tomcat9

12-Sep-2025 00:47:08.799 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java 环境变量:     D:\Software\Java\jre1.8.0_361
12-Sep-2025 00:47:08.799 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java虚拟机版本:    1.8.0_361-b09

Tomcat11

12-Sep-2025 00:54:44.973 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java 环境变量:     D:\Software\Java\jdk-21.0.2
12-Sep-2025 00:54:44.973 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java虚拟机版本:    21.0.2+13-58

所以这里就是问题所在了。

若依4.8.1,是基于Java8开发的,所以也只能在Java8的环境中运行,毕竟Java8和21的版本差异还是挺大的,不能运行也可以理解了。

其实我能找到和解决这个问题也纯属偶然,因为我是从Java8直接过渡到Java21的,所以本地刚好有这两个Java环境,而且由于历史因素保留了两个Tomcat,算是误打误撞找到的解决方法。这也就难怪官方都没办法复现问题,网络上有关的提问和答案也比较少了。估计除了我,都没几个人会刚好有这么蛋疼的2*2的环境了。

好了,到这里问题就解决啦。觉得有用的朋友支持一下吧!

参考链接:

手把手教如何将若依前后端分离项目在Tomcat下部署教程 - 简称LCH - 博客园

环境部署 | RuoYi

activiti项目打war放到tomcat9中运行,提示 404 未找到 · Issue #I6UUYS · 若依/RuoYi - Gitee.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/98030.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/98030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华清远见25072班网络编程学习day6

重点内容&#xff1a;数据库基本概念:数据&#xff08;Data&#xff09;&#xff1a;能够输入计算机并能被计算机程序识别和处理的信息集合数据 &#xff08;Database&#xff09;数据库是在数据库管理系统管理和控制之下&#xff0c;存放在存储介质上的数据集合重要概念&#…

机器学习-网络架构搜索

Neural Architecture Search&#xff08;NAS&#xff09; 一个神经网络有不同类型的超参数 拓扑结构&#xff1a;resnet&#xff0c;mobilenet 单独层&#xff1a;核大小&#xff0c;卷积层的通道&#xff0c;输出隐藏单元的个数NAS自动设计神经网络 如何设计搜索空间 如何探索…

云手机在办公领域中自动化的应用

云手机在办公自动化领域正逐渐展现出强大的潜力&#xff0c;以下是其在办公中自动化应用的多方面介绍&#xff1a;企业借助云手机搭载的办公软件&#xff0c;可实现文档处理自动化&#xff0c;对于重复性文档任务&#xff0c;如制作每月固定格式的销售报告、财务报表等&#xf…

c++多线程(3)------休眠函数sleep_for和sleep_until

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 这两个函数都定义在 头文件中&#xff0c;属于 std::this_thread 命名空间&#xff0c;用于让当前线程暂停执行一段时间。函数功能sleep_for(rel_time)让当前线程休眠一段相对时间&…

Intel RealSense D455深度相机驱动安装与运行

Intel RealSense D455深度相机安装过程遇到过一些报错&#xff0c;所以记录一下安装过程&#xff01;&#xff01;&#xff01;以后方便回顾。 1.安装最新的IntelRealSense SDK2.0 (1) 注册服务器的公钥 sudo apt-get update && sudo apt-get upgrade && su…

从异步到半同步:全面解读MySQL复制的数据一致性保障方案

MySQL 主从复制&#xff08;Replication&#xff09;是其最核心的高可用性和扩展性功能之一。它的原理是将一个 MySQL 实例&#xff08;称为主库 Master&#xff09;的数据变更&#xff0c;自动同步到另一个或多个 MySQL 实例&#xff08;称为从库 Slave&#xff09;的过程。下…

PostgreSQL GIN 索引揭秘

文章目录什么是GIN Index?示例场景GIN Index的原理GIN Index结构MetapageEntriesLeaf PagesEntry page 和 Leaf page 的关系Posting list 和posting tree待处理列表&#xff08;Pending List&#xff09;进阶解读GIN index索引结构总结什么是GIN Index? GIN (Generalized In…

开源多模态OpenFlamingo横空出世,基于Flamingo架构实现图像文本自由对话,重塑人机交互未来

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》&#xff08;跟我一起学人工智能&#xff09;【陈敬雷编著】【清华大学出版社】 清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷…

电子衍射模拟:基于GPU加速的MATLAB/Julia实现

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;注册即送-H卡级别算力&#xff0c;80G大显存&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生更享专属优惠。 引言&#xff1a;电子衍射模拟的重要性与计算挑战 电子…

easyExcel动态应用案例

代码链接&#xff1a;https://download.csdn.net/download/ly1h1/919402991.案例说明&#xff1a;1.1.导入功能导入数据实现转换成 List<List<String>> headers和 List<List<String>> datas&#xff0c;后续补充可以与数据模型注解结合&#xff0c;形…

【数据结构入门】排序算法(5):计数排序

目录 1. 比较排序和非比较排序 2. 计数排序的原理 2.1 计数排序的弊端 3.代码复现 3.1 代码分析 3.2 排序核心 3.3 时间、空间复杂度 1. 比较排序和非比较排序 比较排序是根据排序元素的具体数值比较来进行排序&#xff1b;非比较排序则相反&#xff0c;非比较排序例如&…

输入3.8V~32V 输出2A 的DCDC降压芯片SCT9320

同志们&#xff0c;今天来个降压芯片SCT9320。输入3.8V~32V&#xff0c;输出最高可以达到2A。0.8V的参考电压。500k的开关频率。一共八个引脚&#xff0c;两个NC&#xff08;为什么不做成六个引脚呢&#xff1f;&#xff09;。EN引脚悬空或者接到VIN都可以直接启动&#xff0c;…

C++类和对象详解(2);初识类的默认成员函数

1.类的默认成员函数默认成员函数就是用户没有显示实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类我们不写的情况下编译器会默认生成以下的6个默认成员函数。&#xff08;1&#xff09;构造函数&#xff1a;主要完成初始化的工作&#xff08;2&#xff09…

PLC通信 Tpc客户端Socket

1.PLC通信 namespace _2.PLC通信 {public partial class Form1 : Form{public Form1(){InitializeComponent();}//连接//1.型号: 跟PLC沟通 使用哪个型号的PLC//2.IP 同上//3.机台号:同上//4.插槽号:同上Plc plc new Plc(CpuType.S71200, "192.168.25.80", 0, 1);pr…

Android 开发实战:从零到一集成 espeak-ng 实现中文离线 TTS(无需账号开箱即用)

简介 在移动应用开发中,语音合成(TTS)技术是提升用户体验的重要工具。然而,许多开发者在集成 TTS 时面临依赖网络、需注册账号、功能受限等问题。本文将带你从零开始,通过开源项目 espeak-ng,实现无需账号、开箱即用的中文离线语音播报。 文章将覆盖以下核心内容: esp…

直播APP集成美颜SDK详解:智能美妆功能的开发实战

在这个“颜值即正义”的时代&#xff0c;用户对直播APP的第一印象&#xff0c;往往来自主播的画面质量。高清的视频固然重要&#xff0c;但如果缺少自然美颜和智能美妆功能&#xff0c;观众体验就会大打折扣。于是&#xff0c;美颜SDK成了直播行业的“标配”。今天&#xff0c;…

C++内存管理:new与delete的深层解析

1. 引言在C的世界里&#xff0c;动态内存管理是一个核心话题。对于从C语言过渡到C的开发者来说&#xff0c;一个常见的困惑是&#xff1a;既然C语言的malloc和free依然可以在C中使用&#xff0c;为什么C还要引入new和delete这两个操作符&#xff1f;本文将深入探讨这两对内存管…

【AI开发】【前后端全栈】[特殊字符] AI 时代的快速开发思维

&#x1f680; AI 时代的快速开发思维 —— 以 Django Vue3 为例的前后端分离快捷开发流程 一、AI 时代的开发新思路 在 AI 的加持下&#xff0c;软件开发不再是“纯体力活”&#xff0c;而是 思维工具自动化 的协作。 过去&#xff1a;需求 → 设计 → 开发 → 测试 → 上…

Day24_【深度学习(3)—PyTorch使用—张量的创建和类型转换】

一、创建张量1.张量基本创建方式torch.tensor 根据指定数据创建张量 &#xff08;最重要&#xff09;torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量1.1 torch.tensor# 方式一&…

3-12〔OSCP ◈ 研记〕❘ WEB应用攻击▸利用XSS提权

郑重声明&#xff1a; 本文所有安全知识与技术&#xff0c;仅用于探讨、研究及学习&#xff0c;严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任&#xff0c;本人不承担任何责任。 如需转载&#xff0c;请注明出处且不得用于商业盈利。 …