【问题标题】:GraalVM native-image how to read resource file from JarGraalVM native-image 如何从 Jar 中读取资源文件
【发布时间】:2020-08-27 04:20:47
【问题描述】:

我有一个 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 native-image 中运行时)?有很多第三方 Java 库正在读取捆绑在同一个 Jar 中的资源文件,我们如何克服这个问题?

PS 更新:

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

【问题讨论】:

    标签: java graalvm graalvm-native-image substratevm


    【解决方案1】:

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

    查看文档了解更多详情:https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/Resources.md

    【讨论】:

    • 已经试过了,它只适用于类路径src/main/resources中的资源,如果资源在jar文件中则不起作用。
    • 您好,我在寻找正确的模式时遇到了同样的问题。我使用此处描述的技术来帮助设置配置:github.com/oracle/graal/blob/master/substratevm/…
    猜你喜欢
    • 2021-11-21
    相关资源
    最近更新 更多