在 Spring Boot JAR 中包含外部文件

Posted

技术标签:

【中文标题】在 Spring Boot JAR 中包含外部文件【英文标题】:Include an external files in Spring boot JAR 【发布时间】:2018-03-05 12:30:10 【问题描述】:

我创建了一个 Spring Boot 应用程序,它读取一个 Excel 文件以在前端显示数据,因此基本上它是持久数据的来源。我能够从我的 Eclipse 中正确运行,但是当我创建一个 Spring Boot jar 并从命令行运行它时它会失败,因为文件不包含在 jar 中。

我尝试了两个位置 src/main/resources 和 /src/main/webapp/WEB-INF/external/ 但在这两种情况下文件都不包括在内。

代码:

private static final String FILE1 = "\\src\\main\\webapp\\WEB-INF\\external\\file1.csv";
private static final String FILE2 = "\\src\\main\\webapp\\WEB-INF\\external\\file2.csv";
private static String currentDirectory = Paths.get(".").toAbsolutePath().toString();
private static String completeAbsolutePath = currentDirectory
                      .substring(0, currentDir.length() - 1)
                      .replace("\\", "\\\\");

reader = new CSVReader(new FileReader(completePath + FILE1))

错误:

java.io.FileNotFoundException: c:\delete\src\main\webapp\WEB-INF\external\File1.csv

有人可以帮忙吗?

【问题讨论】:

请将代码粘贴到您引用文件的位置 ***.com/questions/22886083/… 嗨@zuckermanori 这是代码:我从两个文件中读取数据(将它们视为两个单独的数据库表) private static final String FILE1 = "\\src\\main\\webapp\\ WEB-INF\\external\\file1.csv";私有静态最终字符串 FILE2 = "\\src\\main\\webapp\\WEB-INF\\external\\file2.csv";私有静态字符串 completeAbsolutePath = currentDir.substring(0, currentDir.length() - 1).replace("\\", "\\\\"); reader = new CSVReader(new FileReader(completePath + FILE1)) 这是我现在得到的错误:java.io.FileNotFoundException: c:\delete\src\main\webapp\WEB-INF\external\File1.csv(系统找不到指定路径) 请编辑您的问题并添加代码和错误信息 【参考方案1】:

这里有两个问题:

    你把资源放在src文件夹下 而不是创建一个指定的资源文件夹并将其放在那里。 为此,您应该同时创建一个名为“resources”的文件夹 级别为“src”右键单击文件夹,选择“将目录标记为-> 资源根"

    您指的是具有相对路径的文件。这可能适用于 eclipse 但是当你将它作为一个 jar 运行时,路径会改变并且 相对路径不再正确。

    要使用这样的资源,您应该使用ClassLoader API ClassLoader.getResourceAsStream(String name) 获取您的资源。

    它应该类似于以下内容:

    reader = new CSVReader(new InputstreamReader(ClassLoader.getResourceAsStream(completePath +
    

    文件1)));

【讨论】:

你打开jar看到文件不存在了吗? 我能够使用您提供的语句将文件包含在 jar 中。我已将文件放在资源文件夹中,而是将它们包含在 JAR 文件中。谢谢。该应用程序仍未从命令提示符运行,但我相信这是一个不同的问题。

以上是关于在 Spring Boot JAR 中包含外部文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 maven jar 构建过程中包含外部 jar?

如何在我的 gradle java 项目中包含外部 .jar? [复制]

如何将外部jar文件传递给spring boot项目? [复制]

pom文件配置打包外部/自定义jar文件在fat spring boot可执行jar文件中

通过 maven-assembly-plugin 打包在 jar 中包含 spring xml

Spring Boot 可执行 jar 和外部配置文件