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

Spring Boot Gradle项目打jar包后无法读取resources下sensitive.properties文件

Spring Boot Jar包无法读取sensitive.properties解决方案

根因分析

你当前的写法不兼容Jar包运行场景:
Spring Boot 可执行Jar采用嵌套压缩结构,classpath下的资源文件会被打包到BOOT-INF/classes/路径下,属于Jar包内部的压缩条目,不存在文件系统层面的独立物理路径。IDE运行时资源直接存放在本地目录,所以调用resource.getURI().getPath()可以拿到有效路径,Jar包运行时该路径为Jar内部虚拟路径,无法通过文件系统直接读取。

解决方案

方案1:直接通过输入流读取资源(推荐)

不需要获取资源的本地路径,直接通过Resource提供的输入流加载配置:

public void getConfigValue(String configKey) {
    Resource resource = new ClassPathResource("sensitive.properties");
    Properties properties = new Properties();
    try (InputStream inputStream = resource.getInputStream()) {
        properties.load(inputStream);
        String value = properties.getProperty(configKey);
        // 后续业务逻辑
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Spring 项目也可以直接通过注解注入配置值,无需手动读取文件:

// 直接注入配置,Spring会自动处理classpath资源加载
@Value("${你的配置项键名}")
private String sensitiveConfig;

方案2:检查Gradle打包配置,确认资源未被遗漏

如果修改读取逻辑后仍找不到文件,确认资源是否被正确打进Jar包:

  • 检查build.gradle配置是否排除了properties文件,正确的资源配置参考:
sourceSets {
    main {
        resources {
            srcDirs = ["src/main/resources"]
            // 确保包含properties文件,没有单独排除sensitive.properties
            includes = ["**/*.properties", "**/*.yml", "**/*.yaml"]
        }
    }
}
  • 打包完成后解压Jar包,检查BOOT-INF/classes/目录下是否存在sensitive.properties,不存在则说明打包环节遗漏了该文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:36:04