1

经过很长时间,我终于能够在此环境下使用 VS 2017 的开发人员命令提示符通过命令行使用 Graal native 创建一个简单的“HelloWorld”:

  • Graal 虚拟机:graalvm-ce-java11-19.3.2
  • Windows SDK:Windows SDK 10。

我无法让它与其他版本的 graal(graalvm-ce-java11-20.2.0-dev、graalvm-ce-java8-20.2.0-dev..)一起使用,可能是因为本地开发环境的特殊性(无法使用 Windows 7 SDK,例如..)

我的下一个目标是生成简单的可执行文件,但具有一些更复杂的依赖关系,例如。以下 vertx 示例

https://how-to.vertx.io/graal-native-image-howto/

理想情况下,我的意图是使用 maven 插件生成它。如果不可能,作为替代方法,创建一个 fat jar,然后将其转换为原生

1.使用native-image-maven-plugin

  <groupId>org.graalvm.nativeimage</groupId>
  <artifactId>native-image-maven-plugin</artifactId>
  <version>19.3.2</version>

错误:无法在项目 demo01GraalTestClasses 上执行目标 org.graalvm.nativeimage:native-image-maven-plugin:19.3.2:native-image(默认):在没有本地图像的 Java 11+ 上构建图像需要 MAVEN_OPTS='-- add-exports=java.base/jdk.internal.module=ALL-UNNAMED' -> [帮助 1] [错误]

2.创建fat jar后通过命令行

openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment GraalVM CE 19.3.2 (build 11.0.7+10-jvmci-19.3-b10)
OpenJDK 64-Bit Server VM GraalVM CE 19.3.2 (build 11.0.7+10-jvmci-19.3-b10, mixed mode, sharing)

[ **Important** ] call vcvars64.bat !

**native-image.cmd --verbose --static --no-fallback -H:+ReportExceptionStackTraces -jar demoGraalTestClasses.jar demo**



**Error**:

[demo:4920]    classlist:   3,964.94 ms
[demo:4920]        (cap):  38,810.44 ms
[demo:4920]        setup:  41,140.72 ms
[demo:4920]     analysis:  18,151.19 ms
Fatal error: com.oracle.svm.core.util.VMError$HostedError: class java.net.TwoStacksPlainSocketImpl not found

任何想法 ???感谢你!

4

1 回答 1

1

我遇到了同样的错误,没有解决办法。似乎它比 Windows 更多是插件问题。我放弃并准备了ubuntu VM,在与windows(pom.xml,java11,graalvm 20.0.0)完全相同的条件下运行本机映像并且它工作正常。

所以我要么等待下一个插件发布,要么尝试使用 linux 方式。不要指望这里的快速建议。

于 2020-05-18T14:07:27.770 回答