GraalVM如何在本机映像中集成资源文件

问题描述

基于this

默认情况下,本机图像生成器不会集成任何 在将图像构建到图像的过程中,类路径上的资源 它创建的图像。要进行诸如Class.getResource()之类的调用, Class.getResourceAsStream()(或相应的ClassLoader方法) 返回特定资源(而不是null),应返回的资源 必须在图像运行时明确指定可访问性。

这说明了如何通过getResource()访问资源文件。我有一个用例,需要在iOS的WebView中加载资源文件,所以基本上我尝试这样做:

public void start(Stage stage) {

    WebView webView = new WebView();

    URL url = Thread.currentThread().getContextClassLoader().getResource("demo/index.html");
    
    System.out.println("url = " + url);
    System.out.println("url.toExternalForm = " + url.toExternalForm());
    System.out.println("url.getPath()= " + url.getPath());
    
    webView.getEngine().load("file://" + url.getPath());
    
    VBox root = new VBox(webView);
    root.setAlignment(Pos.CENTER);
    Scene scene = new Scene(root,640,480);
    stage.setScene(scene);
    stage.show();
}

这些url.toString()url.toExternalFormurl.getPath()中的任何一个都不返回本机映像中的有效可加载路径,它们的值为resource:demo/index.htmlfile://demo/index.html

有人知道如何在本机映像中管理资源文件吗?它们是否合并在单个二进制文件中?能否通过文件协议找到资源文件?

解决方法

您可以执行以下操作:

native-image -H:IncludeResources= <Java regexp that matches resources to be included in the image> 

要获取完整图片,请查看此链接 https://docs.oracle.com/en/graalvm/enterprise/20/docs/reference-manual/native-image/Resources/

相关问答

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