为了简化原生图像的生成,Native Image 现在使用 Native Image Maven 插件在 Maven 中工作。
您可以使用该命令直接使用 Maven 构建本机可执行文件,而无需将该命令作为单独的步骤运行。但是,使用该插件的 Maven 项目应构建在包含该工具的 JDK 上。GraalVM 就是这样一个 JDK(如果之前已经安装了 )。
接下来,添加到文件部分:
<plugin>
<groupId>org.graalvm.nativeimage</groupId>
<artifactId>native-image-maven-plugin</artifactId>
<version>${graalvm.version}</version>
<executions>
<execution>
<goals>
<goal>native-image</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
<configuration>
<skip>false</skip>
<imageName>example</imageName>
<buildArgs>
--no-fallback
</buildArgs>
</configuration>
</plugin>
最后,在列表中添加库依赖项:org.graalvm.sdk
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>${graalvm.version}</version>
<scope>provided</scope>
</dependency>
该插件确定了它需要将哪些JAR文件传递给本机映像以及可执行主类应该是什么。如果试探法失败并出现错误,则应在插件的节点中指定主类。完成后,将在项目的目标目录中生成可执行文件以供使用。
如果使用 Native Image Maven 插件,它将获取存储在 META-INF/native-image/资源位置下的应用程序的所有配置,如 Native Image Build Configuration 中所述。也可以在节点内自定义插件。以下配置可用。
#1
<maven-shade-plugin> <transformers> <transformer> <mainClass>
#2
<maven-assembly-plugin> <archive> <manifest> <mainClass>
#3
<maven-jar-plugin> <archive> <manifest> <mainClass>
<imageName>exeFileName<imageName>
<buildArgs><buildArgs>
<configuration>
<imageName>executable-name</imageName>
<mainClass>com.test.classname</mainClass>
<buildArgs>
--no-fallback
</buildArgs>
<skip>false</skip>
</configuration>
如果您使用GraalVM Enterprise作为环境,则该插件将构建一个启用了企业功能的本机映像,例如,将自动构建一个可执行文件,并启用压缩引用和其他优化。
该元素可以在父 POM 和子 POM 之间组合。假设以下父 POM 定义:
<plugin>
<groupId>org.graalvm.nativeimage</groupId>
<artifactId>native-image-maven-plugin</artifactId>
<version>${graalvm.version}</version>
<configuration>
<imageName>${project.artifactId}</imageName>
<mainClass>${exec.mainClass}</mainClass>
<buildArgs>
<buildArg>--no-fallback<buildArg>
</buildArgs>
</configuration>
</plugin>
子项目能够通过以下方式追加s :
<plugin>
<groupId>org.graalvm.nativeimage</groupId>
<artifactId>native-image-maven-plugin</artifactId>
<configuration>
<buildArgs combine.children="append">
<buildArg>--verbose</buildArg>
</buildArgs>
</configuration>
</plugin>
在这种情况下,将传递给可执行文件的参数将是:native-image
--no-fallback --verbose
引用自[Oracle GraalVM Enterprise Edition 20 Guide]