首页 > 解决方案 > 如何读取 Quarkus 原生镜像中的类路径资源?

问题描述

我已经使用将资源添加到类路径

<additionalBuildArg>-H:IncludeResources=.*/kubernetes_auth.crt$</additionalBuildArg>
<additionalBuildArg>-H:Log=registerResource:verbose</additionalBuildArg>

当我构建图像时,我可以在日志中看到如果我添加它

ResourcesFeature: registerResource: classes/kubernetes_auth.crt

但是当我尝试使用以下适用于 Java 的代码读取资源时,它返回 null

InputStream is = KubernetesResource.class.getResourceAsStream("/kubernetes_auth.crt");

我已经尝试过使用这些变体,但同样返回 null

Thread.currentThread().getContextClassLoader().getResourceAsStream("/kubernetes_auth.crt");
ClassLoader.getSystemClassLoader().getResourceAsStream("/kubernetes_auth.crt");
getClass().getResourceAsStream("classes/kubernetes_auth.crt");

quarkus 0.13.3 和 0.14.0 以及 Graal rc14、rc15、rc16 的版本

标签: quarkus

解决方案


正如您所发现的,您需要指定要加载的资源。

从 Quarkus 1.8.0 开始(以及之前的一段时间),您可以使用属性列出应该可用于本机映像加载的资源:

quarkus.native.resources.includes=kubernetes_auth.crt

该属性支持以逗号分隔的文件列表。此列表的语法在构建本机映像的配置参考中进行了描述:https ://quarkus.io/guides/building-native-image#configuration-reference


推荐阅读