0%
Theme NexT works best with JavaScript enabled
GraalVM安装与Native-Image体验 安装环境 Linux Mint 20 64bit
GraalVM安装 下载安装文件 1 2 3 4 wget https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java11-linux-amd64-20.2.0.tar.gz wget https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/llvm-toolchain-installable-java11-linux-amd64-20.2.0.jar wget https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/native-image-installable-svm-java11-linux-amd64-20.2.0.jar wget https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/wasm-installable-svm-java11-linux-amd64-20.2.0.jar
安装与配置 解压graal到安装位置 1 tar -xzf graalvm-ce-java11-linux-amd64-20.2.0.tar.gz -C ${安装位置}
配置环境变量 系统环境变量
1 2 3 # sudo vim /et/profile export JAVA_HOME=${安装位置}/graalvm-ce-java11-linux-amd64-20.2.0 export PATH=${JAVA_HOME}/bin:${PATH}
用户环境变量
1 2 3 # sudo vim ~/.bashrc export JAVA_HOME=${安装位置}/graalvm-ce-java11-linux-amd64-20.2.0 export PATH=${JAVA_HOME}/bin:${PATH}
安装组件 1 2 3 gu -L install llvm-toolchain-installable-java11-linux-amd64-20.2.0.jar gu -L install native-image-installable-svm-java11-linux-amd64-20.2.0.jar gu -L install wasm-installable-svm-java11-linux-amd64-20.2.0.jar
运行gu list可以看到已安装组件 1 2 3 4 5 6 7 8 tqd@tqd-pc:/data/me/blog-test$ gu list ComponentId Version Component name Origin -------------------------------------------------------------------------------- js 20.2.0 Graal.js graalvm 20.2.0 GraalVM Core llvm-toolchain 20.2.0 LLVM.org toolchain native-image 20.2.0 Native Image wasm 20.2.0 GraalWasm
Native-Image体验 创建Maven工程 POM文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 # cat pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tqd.test</groupId> <artifactId>cli-test</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>cli-test</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>info.picocli</groupId> <artifactId>picocli</artifactId> <version>4.6.1</version> </dependency> <dependency> <groupId>info.picocli</groupId> <artifactId>picocli-codegen</artifactId> <version>4.6.1</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.graalvm.nativeimage</groupId> <artifactId>native-image-maven-plugin</artifactId> <version>20.2.0</version> <configuration> <imageName>${project.name}</imageName> <mainClass>com.tqd.test.App</mainClass> </configuration> <executions> <execution> <goals> <goal>native-image</goal> </goals> <phase>package</phase> </execution> </executions> </plugin> </plugins> </build> </project>
Java文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # cat src/main/java/com/tqd/test/App.javapackage com.tqd.test; import picocli.CommandLine; import picocli.CommandLine.Parameters; public class App { public static void main( String[] args ){ Cli cli=new Cli(); new CommandLine(cli).execute(args); } public static class Cli implements Runnable { @Parameters(paramLabel = "name",description = "the name of you",defaultValue = "Bob") private String name; @Override public void run() { System.out.printf( "Hello %s!\n",name); } } } # ```shell mvn package -DskipTests
测试 1 2 3 4 5 ./target/cli-test ttt # 输出: Hello ttt! docker run --rm -ti -v $(pwd)/target:/test ubuntu /test/cli-test ttt # 输出:Hello ttt!
注意事项
构建native image时,如果jar中没有配置文件,那么构建出来的native image运行是需要Java运行时。
参考
Graalvm
Graalvm Configuration
picocli
picocli-codegen
完整代码