java - GraalVM native-image 如何从 Jar 中读取资源文件
问题描述
我有一个 jar 文件,其中包含一些文本文件,我正在尝试将文件加载为:
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
它不起作用,因为错误显示:
[SUB] java.lang.NullPointerException
[Thu Aug 27 12:07:48 SGT 2020][INFO] [SUB] at java.io.Reader.<init>(Reader.java:167)
[Thu Aug 27 12:07:48 SGT 2020][INFO] [SUB] at hellofx.HelloFX.readFileAsStringFromJar(HelloFX.java:116)
[Thu Aug 27 12:07:48 SGT 2020][INFO] [SUB] at hellofx.HelloFX.test(HelloFX.java:107)
如果我尝试将资源文件提取到 classpath src/main/resources
,那么它工作正常。
我的问题是,我们可以从 Jar 中读取资源文件吗(在GraalVM本机映像中运行时)?有很多第三方 Java 库正在读取捆绑在同一个 Jar 中的资源文件,我们如何克服这个问题?
PS更新:
这确实是我的错误,与class.getResource()
and混淆了class.getClassLoader().getResource()
。一个在开始时需要斜线,另一个不允许。一旦我删除了path
变量中的斜线,它就可以正常工作了。
解决方案
您需要通过-H:IncludeResources=path
. 该值可以是正则表达式。
有关更多详细信息,请参阅文档:https ://github.com/oracle/graal/blob/master/substratevm/Resources.md
推荐阅读
- javascript - 在 JavaScript 中等待 Socket.io 响应
- python - 使用 psycopg2 将数据从 Postgresql 提取到 python 的最快/最有效的方法是什么
- dataweave - 跳过空字段 mule 4 的行
- visual-studio-2019 - 如何在 Visual Studio 的编辑器窗口中设置标题
- javascript - 如何在应用方法之前将对象“保存”在数组中?
- websocket - WebSockets 客户端不接收来自 Akka 流 ActorSource 的数据
- c# - 是否可以在 appsettings 中存储和检索类型?
- teradata - 在 Informatica 中简单实现 volatile/temp 表的想法
- amazon-sqs - 订阅 SNS 时,AWS 是否向 SQS 传递较旧的消息
- python - 针对fuzzywuzzy列表的Python多处理