若依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的程序包罢了。

XML 复制代码
        <!-- 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

相关推荐
Funcy2 小时前
XxlJob 源码分析05:执行器注册流程
java
Boop_wu2 小时前
[数据结构] 队列 (Queue)
java·jvm·算法
无敌的神原秋人2 小时前
关于Redis不同序列化压缩性能的对比
java·redis·缓存
Chan163 小时前
JVM从入门到实战:从字节码组成、类生命周期到双亲委派及打破双亲委派机制
java·jvm·spring boot·后端·intellij-idea
招风的黑耳3 小时前
Java生态圈核心组件深度解析:Spring技术栈与分布式系统实战
java·spring·wpf
zhangyifang_0094 小时前
泛型通配符 T、E、K、V、?
java
四谎真好看4 小时前
Java 黑马程序员学习笔记(进阶篇6)
java·笔记·学习·学习笔记
星梦清河4 小时前
宋红康 JVM 笔记 Day17|垃圾回收器
java·jvm·笔记