GraalVM本机映像如何从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)

如果我尝试将资源文件提取到类路径src/main/resources中,那么它将正常工作。

我的问题是,我们可以从Jar中读取资源文件(当以GraalVM本机图像运行时)吗?有很多第三方Java库正在读取捆绑在同一Jar中的资源文件,我们如何克服这个问题?

PS更新:

这确实是我的错误,与class.getResource()class.getClassLoader().getResource()混淆。一开始要求斜杠,而另一不允许。一旦删除了path变量中的斜杠,它就可以正常工作。

解决方法

您需要通过-H:IncludeResources=path告诉本地图像要包括哪些资源。该值可以是正则表达式。

有关更多详细信息,请参见文档:https://github.com/oracle/graal/blob/master/substratevm/Resources.md

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...