1

基于

默认情况下,原生镜像构建器不会将镜像构建期间类路径中的任何资源集成到它创建的镜像中。要使诸如 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.html要么file://demo/index.html

有谁知道如何在本机映像中管理资源文件?它们是否在单个二进制文件中合并?无论如何,我们是否能够通过文件协议定位资源文件?

4

1 回答 1

1

你可以这样做:

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/

于 2020-08-29T11:02:06.310 回答