侧边栏壁纸
博主头像
里奥的博客博主等级

行动起来,活在当下

  • 累计撰写 24 篇文章
  • 累计创建 7 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

更改 war 为 jar 时出现FileNotFoundException

里奥
2024-05-06 / 0 评论 / 0 点赞 / 46 阅读 / 2480 字

问题

项目部署在Docker里运行, 原来使用的基础镜像是tomcat:10.1-jre17现在需要将tomcat移除, 所以需要将原来程序从war包的方式修改为jar包.

但是修改完成后, 当程序读文件时出现java.io.FileNotFoundException: file:/xxx!/BOOT-INF/classes!/Fre3of9x.ttf (No such file or directory) 的异常, 确认文件是存在jar包里头的.

原因

后来发现问题出现在下面这一段代码上, 具体就是FileInputStream fis = new FileInputStream(file), 原因在于这种获取配置文件的方式无法获取压缩包中的文件.

            for (File file : files) {
                try (FileInputStream fis = new FileInputStream(file)) {
                    ZipEntry entry = new ZipEntry(file.getName());
                    zipOut.putNextEntry(entry);
                    byte[] buffer = new byte[fis.available()];
                    if (fis.read(buffer) != -1) {
                        zipOut.write(buffer);
                    }
                }
            }

解决方案

由于不能够修改原代码, 参考 官方文档,可以使用下面的方式,也就是 先解压缩jar包,再启动相应的启动器, 问题解决

jar -xf app.jar
java org.springframework.boot.loader.JarLauncher

官方文档的描述

参考文档

  1. Deploying Spring Boot Applications

  2. SpringBoot项目jar启动异常:java.io.FileNotFoundException: file:/xxx/xxx.jar!/BOOT-INF/classes!/xxx.yml_springboot .filenotfoundexception-CSDN博客

0

评论区