首页 > 解决方案 > Spring / Maven 从类路径加载文件

问题描述

在我的资源文件夹中:

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它成功找到该文件。如果我运行:

我得到一个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:repackage找不到java -jar target/app.jar文件。

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

我怎样才能使文件可用?

标签: javaspringmavenspring-boot

解决方案


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

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

你可以在这里阅读更多关于它的信息。


推荐阅读