GraalVM native-image 如何从 Jar 中读取资源文件
GraalVM native-image how to read resource file from 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 中读取资源文件吗(当 运行 in GraalVM native-image 时)?有很多第三方 Java 库正在读取捆绑在同一个 Jar 中的资源文件,我们如何克服这个问题?
PS更新:
确实是我的错误,混淆了class.getResource()
和class.getClassLoader().getResource()
。一个在开始时需要斜线,而另一个则不允许。删除 path
变量中的斜杠后,它工作正常。
您需要通过 -H:IncludeResources=path
告诉本机图像要包含哪些资源。该值可以是正则表达式。
有关详细信息,请参阅文档:https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/Resources.md
我有一个 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 中读取资源文件吗(当 运行 in GraalVM native-image 时)?有很多第三方 Java 库正在读取捆绑在同一个 Jar 中的资源文件,我们如何克服这个问题?
PS更新:
确实是我的错误,混淆了class.getResource()
和class.getClassLoader().getResource()
。一个在开始时需要斜线,而另一个则不允许。删除 path
变量中的斜杠后,它工作正常。
您需要通过 -H:IncludeResources=path
告诉本机图像要包含哪些资源。该值可以是正则表达式。
有关详细信息,请参阅文档:https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/Resources.md