java - 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
它成功找到该文件。如果我运行:
mvn package
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:repackage
找不到java -jar target/app.jar
文件。
我检查了所有文档并尝试了几种不同的方法来加载文件,但无论哪种方式都找不到它。
我怎样才能使文件可用?
解决方案
您需要src/main/resources
使用其相对路径将您的目录包含在 pom.xml 中的类路径中:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
你可以在这里阅读更多关于它的信息。
推荐阅读
- python - 如何将python脚本的输出存储在变量中
- c# - 在 C# 中将数组值转换为十六进制
- java - 在 JSP 中填充垂直表
- python - 如何按包含 Python 列表的数据框单元格进行分组?
- javascript - 如何在 VS Code 中禁用特定源的智能感知?
- c# - 使用 NEST api 进行弹性搜索的日期范围搜索返回不适当的结果
- python - Pepper - .bmp 到 .explo
- go - 如何在登录页面中写入用户登录错误
- kubernetes - Azure Devops 错误:“io.k8s.api.core.v1.PodSpec 中的未知字段“imagePullPolicy””
- r - dir.create 和 shinyapps.io 的问题