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

如何在Quarkus maven插件中,我可以在本机编译期间向GraalVM添加参数?

高经艺
2023-03-14

当我为我的应用程序构建本机映像时,我有一些我不理解的错误。

    Error: unsupported features in 3 methods
    Detailed message:
    Error: com.oracle.svm.hosted.substitute.DeletedElementException:     Unsupported method java.lang.Class.getConstantPool() is reachable: The declaring class of this element has been substituted, but this element is not present in the substitution class

Graal建议我在运行时设置此选项--report-不支持的-元素

我读了NativeImageMojo的密码

我想说的是:

  <plugin>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-maven-plugin</artifactId>
      <version>${quarkus.version}</version>
      <executions>
      <execution>
          <goals>
             <goal>native-image</goal>
          </goals>
      <configuration>
           <enableHttpUrlHandler>true</enableHttpUrlHandler>
           <containerRuntimeOptions>--report-unsupported-elements-at-runtime</containerRuntimeOptions>
      </configuration>
      </execution>
      </executions>
  </plugin>

但选项不显示:

[INFO] [io.quarkus.creator.phase.nativeimage.NativeImagePhase] /sandbox/Resources/GraalVm/graalvm-ce-1.0.0-rc15/bin/native-image -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -jar portfolio-app-1.0-SNAPSHOT-runner.jar -J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 -H:FallbackThreshold=0 -H:+PrintAnalysisCallTree -H:-AddAllCharsets -H:EnableURLProtocols=http,https --enable-all-security-services -H:NativeLinkerOption=-no-pie -H:-SpawnIsolates -H:+JNI --no-server -H:-UseServiceLoaderFeature -H:+StackTrace

我如何在运行时添加--report-unperding-entels-at-runtime?(我使用Quarkus-bom 0.14.0与graalvm-ce-1.0.0-rc15)

共有3个答案

孙帅
2023-03-14

您可以使用additionalBuildArgs参数:

<plugin>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-maven-plugin</artifactId>
  <version>${quarkus.version}</version>
  <executions>
  <execution>
    <goals>
       <goal>native-image</goal>
    </goals>
  <configuration>
     <enableHttpUrlHandler>true</enableHttpUrlHandler>
     <additionalBuildArgs>--report-unsupported-elements-at-runtime</additionalBuildArgs>
  </configuration>
  </execution>
  </executions>
</plugin>
曾嘉祯
2023-03-14

你的两个命题工作得很好,但两者并不完全相同。
选项-H:报告不支持的元素运行时返回:

Fatal error: java.lang.NoClassDefFoundError
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:598)
        at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1005)
        at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:459)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:288)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:422)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:108)
Caused by: java.lang.NoClassDefFoundError: javax/security/jacc/EJBMethodPermission
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.getDeclaredMethods(Class.java:1975)
        at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.handleDeletedClass(AnnotationSubstitutionProcessor.java:437)
        at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.handleClass(AnnotationSubstitutionProcessor.java:270)
        at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.init(AnnotationSubstitutionProcessor.java:230)
        at com.oracle.svm.hosted.NativeImageGenerator.createDeclarativeSubstitutionProcessor(NativeImageGenerator.java:865)
        at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:820)
        at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:522)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:442)
        at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.lang.ClassNotFoundException: javax.security.jacc.EJBMethodPermission
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 15 more
Error: Image build request failed with exit status 1

运行时返回未支持的元素:

Fatal error: java.lang.NoClassDefFoundError
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:598)
        at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1005)
        at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:459)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:288)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:422)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:108)
Caused by: java.lang.NoClassDefFoundError: javax/security/jacc/PolicyContextException
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.getDeclaredMethods(Class.java:1975)
        at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.handleDeletedClass(AnnotationSubstitutionProcessor.java:437)
        at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.handleClass(AnnotationSubstitutionProcessor.java:270)
        at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.init(AnnotationSubstitutionProcessor.java:230)
        at com.oracle.svm.hosted.NativeImageGenerator.createDeclarativeSubstitutionProcessor(NativeImageGenerator.java:865)
        at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:820)
        at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:522)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:442)
        at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.lang.ClassNotFoundException: javax.security.jacc.PolicyContextException
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 15 more
Error: Image build request failed with exit status 1

我找到一些留档

--运行时报告不支持的元素第一次访问时报告运行时不支持的方法和字段的使用情况,而不是作为映像构建期间的错误。

我在这个网站上找到了关于-H:reportunsupportdelementsatruntime的信息

在第一次访问不受支持的方法和字段时,在运行时报告它们的使用情况,而不是在映像构建期间作为错误报告

描述完全相同,但我不明白为什么回报不同。

洪通
2023-03-14

在这种情况下,最好的方法是使用:

<reportErrorsAtRuntime>true</reportErrorsAtRuntime>

在您的本机图像目标的配置中。

 类似资料:
  • 我有一个JavaFX项目,希望使用GraalVM Java虚拟机和相关的本机映像工具将其编译成Linux二进制文件。我正在使用GraalVM Java 11版本20.1.0和本机Image Maven插件来实现这一点,该插件是通过Maven添加的。 最初,我收到一个错误,说明我使用本机映像跟踪代理生成用于反射的配置文件,我将其传递到编译器插件中,如下所示: 我还打开了堆栈跟踪异常报告。 现在,当我

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

  • 我想在我的项目中添加一个修改过的maven插件。它包含一个在中央存储库中尚不可用的特性。我试过用system scope添加它,并在本地回购中安装它,但它不起作用。这是可行的还是我必须安装插件在每台机器上我想建立这个项目? git repo可在以下位置找到: https://github.com/crydust/dukeshoppinglist 更新 根据“Maven3-Distribute cu

  • 我在gradle构建过程中出现以下错误: 注意:我使用命令'gradle tasks'来找到任务的名称:'YLI SharedLibrary'。

  • 问题内容: 我想在Tomcat中添加gdal库。我读了Tomcat中找不到的本机库,但不知道应该在哪里添加。 错误: 我从以下网址下载了gdal 64位:http ://vbkto.dyndns.org:1280/sdk/PackageList.aspx?file= release-1600-x64-gdal-1-9-mapserver-6-2.zip 问题答案: 必须在而不是startup.ba

  • 问题内容: 我想在现有的CSV文件中添加一行标题,并在适当位置进行编辑。我怎样才能做到这一点? 我想结束 更改初始CSV输出不方便。 任何标准命令都可以。重要的是,文件已就地编辑,并且该行插入到文件的开头。 问题答案: 这将在文件的开头添加自定义文本: