Graalvm上手体验

一、安装GraalVM

官方文档:Getting Started with GraalVM

GraalVM下载,GraalVM官方提供了社区版和企业版。直接下载社区版,可以选择基于java8或基于java11等不同环境的版本。由于我使用的java8,所以下载基于java8的版本。

1.下载后解压,设置环境变量

JAVA_HOME = C:\dev\Tools\graalvm-ce-java8-21.1.0

GRAALVM_HOME = C:\dev\Tools\graalvm-ce-java8-21.1.0

PATH中添加  %GRAALVM_HOME%\bin

2.安装native-image 

配置好环境变量后,{GRAALVM_HOME}/bin/gu就能直接访问了

C:\Users\lp>gu install native-image
Downloading: Component catalog from www.graalvm.org
Processing Component: Native Image
Downloading: Component native-image: Native Image  from github.com
Installing new component: Native Image (org.graalvm.native-image, version 21.1.0)

3.windows平台安装Microsoft Visual C++ (MSVC)

如果在实践中出现以下错误,则是没有安装MSVC或者没有进行环境初始化。

Error: Default native-compiler executable 'cl.exe' not found via environment variable PATH

 

在windows平台上build本地GraalVM镜像,就需要安装Microsoft Visual C++ (MSVC)。MSVC的版本取决于GraalVM依赖的java版本。具体详情参考官方说明:Prerequisites for Using Native Image on Windows

官方的解决方法如下:

1)基于JDK8的GraalVM,需要MSVC 2010 SP1 version,并推荐的安装方法是使用Microsoft Windows SDK 7.1:直接从Window SDK 7.1 image from Microsoft下载GRMSDKX_EN_DVD.iso,然后F:\Setup\SDKSetup.exe直接挂起镜像。(这里不知道官方文档想表达什么意思,我直接安装后也不起作用。最后我直接安装Visual Studio 2017 Visual C++ Build Tools解决问题。)

2)基于JDK11的GraalVM,需要MSVC 2017 15.5.5或之后版本。

stackoverflow上也有该问题:cl.exe missing when building native app using GraalVM

 

4.初始化环境

直接执行命令初始化环境

#VS2017
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"

#VS2019
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\ Build\vcvars64.bat”

或者手动点击命令提示符来初始化

我直接使用命令来初始化,如下

D:\>call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'

二、入门案例

1.先编写一段Java代码

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello, World!");
  }
}

手动编译

D:\>javac HelloWorld.java

运行,输出“Hello World”,表明程序没有问题。

D:\>java HelloWorld
Hello, World!

2.编译

D:\>native-image HelloWorld
[helloworld:11552]    classlist:   8,569.48 ms,  1.14 GB
[helloworld:11552]        (cap):   3,427.01 ms,  1.14 GB
[helloworld:11552]        setup:   7,834.29 ms,  1.62 GB
[helloworld:11552]     (clinit):     182.21 ms,  1.62 GB
[helloworld:11552]   (typeflow):   7,517.48 ms,  1.62 GB
[helloworld:11552]    (objects):   4,503.86 ms,  1.62 GB
[helloworld:11552]   (features):     279.05 ms,  1.62 GB
[helloworld:11552]     analysis:  12,821.36 ms,  1.62 GB
[helloworld:11552]     universe:     635.62 ms,  1.62 GB
[helloworld:11552]      (parse):   2,408.88 ms,  1.65 GB
[helloworld:11552]     (inline):   2,643.45 ms,  1.65 GB
[helloworld:11552]    (compile):  14,668.37 ms,  1.87 GB
[helloworld:11552]      compile:  20,715.77 ms,  1.87 GB
[helloworld:11552]        image:   1,928.67 ms,  1.87 GB
[helloworld:11552]        write:   3,047.36 ms,  1.87 GB
# Printing build artifacts to: helloworld.build_artifacts.txt
[helloworld:11552]      [total]:  56,019.11 ms,  1.87 GB 

3.运行

注意,生成的可执行文件名称大小写。

D:\>helloworld
Hello, World!

 

posted @ 2021-06-15 21:33  静水楼台/Java部落阁  阅读(2685)  评论(0编辑  收藏  举报