当前位置: 首页 > 知识库问答 >
问题:

如何使用GraalVM和JavaFX在Maven中编译本机图像?

叶阳
2023-03-14

我有一个JavaFX项目,希望使用GraalVM Java虚拟机和相关的本机映像工具将其编译成Linux二进制文件。我正在使用GraalVM Java 11版本20.1.0和本机Image Maven插件来实现这一点,该插件是通过Maven添加的。

<plugin>
    <groupId>com.oracle.substratevm</groupId>
    <artifactId>native-image-maven-plugin</artifactId>
    <version>19.2.1</version>
    <configuration>
        <mainClass>sample.NewMain</mainClass>
        <imageName>sample</imageName>
        <buildArgs>
            -H:ReflectionConfigurationFiles=/home/user/Documents/Projects/TestProject/src/main/java/sample/reflect-config.json -H:+ReportExceptionStackTraces
        </buildArgs>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>native-image</goal>
            </goals>
            <phase>package</phase>
        </execution>
    </executions>
</plugin>

最初,我收到一个错误,说明警告:由于没有配置的反射使用而中止独立映像构建。我使用本机映像跟踪代理生成用于反射的配置文件,我将其传递到编译器插件中,如下所示:-H:反射配置文件=/home/用户/文档/项目/测试项目/src/main/java/样本/reflect-config.json-H:报告异常堆栈跟踪

我还打开了堆栈跟踪异常报告。

现在,当我尝试编译为本机映像时,我收到以下与使用本机库有关的错误:

Warning: System method java.lang.System.loadLibrary invoked at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:163)
Warning: System method java.lang.System.loadLibrary invoked at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:177)
Warning: Aborting stand-alone image build due to loading native libraries without configuration.
com.oracle.svm.hosted.FallbackFeature$FallbackImageRequest: System method java.lang.System.loadLibrary invoked at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:163)
System method java.lang.System.loadLibrary invoked at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:177)
Aborting stand-alone image build due to loading native libraries without configuration.
    at com.oracle.svm.hosted.FallbackFeature.afterAnalysis(FallbackFeature.java:293)
    at com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$9(NativeImageGenerator.java:741)
    at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:70)
    at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:741)
    at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:538)
    at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:451)
    at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)

如何配置本机库的使用?在本机图像编译器工具中没有这个选项,我在任何地方都找不到它。

我已经设法用本机图像工具编译了其他项目,这意味着这个问题与JavaFX有关。

共有1个答案

殷德本
2023-03-14

这样做行不通。你必须使用Gluons客户端maven插件https://github.com/gluonhq/client-maven-plugin为此目的。它提供了编译的Java和JavaFX库的特殊版本来实现这一点。严格遵循说明。然后它就会起作用。我经常使用它。

 类似资料:
  • 我有一个Java项目,我用GraalVM原生映像编译成可执行的二进制文件。我想为Travis CI的项目配置持续集成过程,这对我来说很难——Travis CI允许吗?如何配置。特拉维斯。用GraalVM原生图像构建的yml文件?

  • 我的应用程序位于Quarkus框架之上。该应用程序的主要功能是简单的REST API,用于安排一些任务(现在它只是将一些消息发布到日志中)。 调度功能是我用Quartz framework实现的,通常情况下,当应用程序收到安排新事件的POST请求时,它会做两件事: 将实体从请求保存到数据库 在JSON中提到的日期和时间上安排Quartz作业 此外,当应用程序刚刚启动时,我创建了从数据库中获取所有实

  • 我试图使用<code>原生映像maven插件

  • 当我为我的应用程序构建本机映像时,我有一些我不理解的错误。 Graal建议我在运行时设置此选项--report-不支持的-元素 我读了NativeImageMojo的密码 我想说的是: 但选项不显示: 我如何在运行时添加--report-unperding-entels-at-runtime?(我使用Quarkus-bom 0.14.0与graalvm-ce-1.0.0-rc15)

  • 我正在试图弄清楚如何通过将GraalVM本机映像代理与Quarkus应用程序一起使用。 我试着跑步: 但是我得到了一个错误: 有什么提示吗? 我的Java版本:

  • 我正在做一个类项目,需要使用Maven作为JavaFx项目的构建工具。 这是我的pom.xml设置,我在其中使用了2个插件。根据我的理解:是强制java jdk 1.8作为编译器,是自动下载javafx库。 另外,我的主启动器main.java文件位于。与文件夹处于同一级别。 然而,编译总是失败。 我不知道哪一步错了...任何想法都将不胜感激。