java - Spring/Maven 从类路径加载文件

标签 java spring maven spring-boot

在我的资源文件夹中:

src/main/resources

我有两个文件:application.properties 文件和一个 JSON 文件app.schema.json

我有以下功能:

private File loadSchema(String schemaName) throws JsonSchemaMissingException {
        ClassLoader classLoader = JsonSchemaValidator.class.getClassLoader();
        File file = new File(Objects.requireNonNull(classLoader.getResource("app.schema.json")).getFile());

        if (!file.exists()) {
            log.LogErrorWithTransactionId("", "file does not exist " + file.getAbsolutePath());
            throw new JsonSchemaMissingException("file does not exist");
        }
        return file;
    }

如果我运行 mvn spring-boot:run 它会成功找到该文件。如果我运行:

  • mvn 包
  • java -jar app.jar

我得到一个 NullPointer 因为以下文件不存在:

/home/XXX/Docs/project/XXX/file:/home/ghovat/Docs/project/XXX/target/app.jar!/BOOT-INF/classes!/app.event.json

在构建中的 pom.xml 中,我添加了以下设置:

<resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>

无论哪种方式都不起作用。如果我运行 mvn spring-boot:run 它可以到达该文件 而且如果我运行 mvn clean package spring-boot:repackagejava -jar target/app.jar 它也找不到该文件。

我检查了所有文档并尝试了几种不同的方法来加载文件,但无论哪种方式都找不到它。

如何使该文件可用?

最佳答案

您需要使用其相对路径将 src/main/resources 目录包含到 pom.xml 中的类路径中:

 <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
 </build>

您可以阅读更多相关信息here .

关于java - Spring/Maven 从类路径加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58660847/

相关文章:

java - Android Listview 和 textWatcher

java代码读取邮件内容中的xml内容

java - 如何使用zuul将响应主体提取到后置过滤器中

java - Spring 时区问题中的 DateTimeFormat 注释

java - Amazon SNS java - 自定义 header ?

c++ - 计算多边形的最小面积矩形

没有(远程)存储库的 Maven?

java - 将 javaFX (.jar) 文件导入 Netbeans Maven 项目

java - maven:将资源从依赖 jar 复制到目标文件夹

spring - 如何在Spring Boot中的存储库中的@Aggregation注释中添加 "allowDiskUse"?