当前位置: 首页 > 工具软件 > Image Combine > 使用案例 >

Native Image Maven 插件

沈国安
2023-12-01

Native Image Maven 插件

为了简化原生图像的生成,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文件传递给本机映像以及可执行主类应该是什么。如果试探法失败并出现错误,则应在插件的节点中指定主类。完成后,将在项目的目标目录中生成可执行文件以供使用。

Maven 插件自定义

如果使用 Native Image Maven 插件,它将获取存储在 META-INF/native-image/资源位置下的应用程序的所有配置,如 Native Image Build Configuration 中所述。也可以在节点内自定义插件。以下配置可用。

  1. 配置参数 :如果执行失败并显示错误,则应指定主类。默认情况下,插件按以下顺序查询文件中的多个位置,以确定图像的主类应是什么:
#1
<maven-shade-plugin> <transformers> <transformer> <mainClass>
#2
<maven-assembly-plugin> <archive> <manifest> <mainClass>
#3
<maven-jar-plugin> <archive> <manifest> <mainClass>
  1. 配置参数 :如果未显式设置图像文件名,请使用参数为图像提供自定义文件名。
    <imageName>exeFileName<imageName>
  2. 配置参数 :如果要将 其他选项传递给本机映像生成器,请在插件的定义中使用该参数。例如,要构建启用了断言的本机映像,该断言使用 com.test.classname 作为主类,请添加:
    <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 之间组合。假设以下父 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]

 类似资料: