Spring Boot uber JAR:无法解析为绝对文件路径,因为它不驻留在文件系统中

时间:2018-11-07 06:26:11

标签: java spring-boot

将Spring Boot版本1.5.7.RELEASE导出到可运行的JAR后出现以下错误。我出于安全原因不使用Maven,而是在构建路径中添加了所有JAR。

我在命令下运行

java -jar mailer.jar

然后我在屏幕截图中看到了错误消息

enter image description here

3 个答案:

答案 0 :(得分:2)

试试这个

IOUtils.toString(new InputStreamReader(this.getClassLoader().getResourceAsStream("fileName.json")))

OR

new InputStreamReader(new ClassPathResource("fileName.json", this.getClassLoader()).getInputStream())

不要使用 FileReaderFile

使用InputStreamReaderInputStream

答案 1 :(得分:1)

似乎应用程序正在尝试通过AbstractFileResolvingResource.getFile()(在堆栈跟踪中向下排几行)访问文件,这在可运行的Spring Boot jar中是不可能的(从IDE)。

尝试使用getInputStream()代替,例如,参见this post

答案 2 :(得分:0)

因为打包的uber-jar中不存在您的资源时,classpath出现了问题。使用这样的解决方案

String fuu = "";
ClassPathResource classPathResource = new ClassPathResource("static/foo.txt");
try {
    byte[] binaryData = FileCopyUtils.copyToByteArray(classPathResource.getInputStream());
    fuu = new String(binaryData, StandardCharsets.UTF_8);
} catch (IOException e) {
    e.printStackTrace();
}