dcsuibian
V2EX  ›  Java

无法通过 web 访问 jar 包中的一个 0 字节的文件

  •  
  •   dcsuibian · Feb 25, 2022 · 2092 views
    This topic created in 1609 days ago, the information mentioned may be changed or developed.

    无法访问 jar 包中的一个 0 字节的文件

    我目前正在做一个小型 web 项目。因为项目比较简单,所以用不上 nginx ,而是把前端生成的文件直接放到 /src/main/resources/static 下。

    开发模式用 IDE 运行项目时没有什么问题,但在打包后用java -jar 后会发现前端有一个 chunk 访问不到:

    image-20220225125800200

    然而在生成的 jar 包中,这个chunk-6800bed8.432245a1.css文件是有的,而且和其它 css 文件一样放在BOOT-INF/classes/static/css目录下:

    image-20220225125913381

    其它的 css 访问完全没有问题,但这个就不行。发现的唯一区别就是它的大小是 0B ,也就是空的,怀疑 Spring Boot 在生产模式下对空文件做一些处理。但不确定也不知道怎么解决,所以来问问,请大佬解答。

    附加信息:

    1 、Java:openjdk 11.0.12 。Spring Boot:2.5.3

    2 、前后端分离,前台 vue2 全家桶。空的 chunk 文件确实不应该产生,但我认为即使产生了,Spring Boot 也应该帮我返回回去,最主要是打包后行为不一致。

    3 、前台路由的配合方式是用 ErrorPages ,除了状态码不对外,效果上应该没问题。

    image-20220225131727080

    对比

    通过 IDE 运行:

    其它文件正常访问:

    image-20220225132820037

    此文件也能正常访问(只不过是空的):

    image-20220225132829658

    java -jar 运行:

    其它文件仍能正常访问:

    image-20220225132922170

    此文件无法正常访问(返回了 ErrorPage ):

    image-20220225132936305

    Supplement 1  ·  Feb 25, 2022

    找到问题所在了,ClassPathResource对File URL和jar URL采取不同的做法:

    image-20220225162730187

    在jar中,空文件和目录会被认为是不可读的。而打包走了另一条路。

    这个问题的背景是:https://github.com/spring-projects/spring-framework/issues/21372,有人访问了一个空文件夹,但下载了一个空文件。

    跟我遇到相同问题的有:https://github.com/spring-projects/spring-boot/issues/16034,不过是在spring-boot里。

    我的issue:https://github.com/spring-projects/spring-framework/issues/28107

    2 replies    2022-02-25 13:57:00 +08:00
    cslive
        1
    cslive  
       Feb 25, 2022
    有可能打包之后文件损坏
    dcsuibian
        2
    dcsuibian  
    OP
       Feb 25, 2022
    @cslive 重新打包过几次,maven 3.8.1 ,mvnw 也试过。应该不是损坏,最主要是 jar 包确实里有这个文件,
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3116 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:57 · PVG 21:57 · LAX 06:57 · JFK 09:57
    ♥ Do have faith in what you're doing.