You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java读取jar包内application.properties报错原因及解决方案咨询

错误含义

Error: Unable to load the configuration from the URL file:/root/file:/opt/pcc/lib/smp-asnef.jar!/BOOT-INF/classes!/application.properties

该错误的核心原因是:JAR包是归档压缩文件,内部的资源没有独立的操作系统文件系统路径,你用File类直接读取JAR包内的资源的操作本身就不被支持。路径中的!是JAR资源专属分隔符,用来标识!后面的内容是JAR包内部的路径,这类路径只能通过流的方式读取,不能被File类识别。
同时路径出现了重复的file:协议前缀拼接错误,是调用URL.getFile()方法后直接把完整URL字符串传给File构造方法导致的,进一步导致路径失效。

程序实际查找的路径

程序当前错误拼接的查找路径为:file:/root/file:/opt/pcc/lib/smp-asnef.jar!/BOOT-INF/classes!/application.properties
该路径完全不符合操作系统文件路径规范,所以无法找到目标文件。

解决方案

根据你是否需要修改配置文件,可选择对应方案:

  • 仅读取配置不需要修改
    直接通过类加载器获取资源流读取内容,不要转成File对象:
    try (InputStream is = this.getClass().getClassLoader().getResourceAsStream("application.properties")) {
        Properties prop = new Properties();
        prop.load(is);
        // 后续处理配置
    } catch (IOException e) {
        // 处理资源加载异常
    }
    
  • 需要修改配置内容
    JAR包内部文件默认是只读状态,运行时无法直接修改,建议调整配置加载逻辑:
    • 将可修改的配置文件放到JAR包外部固定路径,比如/opt/pcc/config/application.properties,程序优先读取外部路径配置,找不到时再读取JAR包内部的默认配置
    • 如果你使用的是Spring Boot项目,可以直接复用框架的外部配置优先级规则,启动时添加启动参数--spring.config.location=/opt/pcc/config/application.properties即可直接覆盖内部配置
    • 如需动态修改配置,建议使用配置中心、本地缓存文件或者数据库存储可变更的配置项,不要尝试直接修改JAR包内的文件

内容的提问来源于stack exchange,提问作者Igor_M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 08:54:06