用法
介绍
Maven JLink 插件用于使用JDK 9创建模块化运行时映像。
要链接到模块化运行时映像的预期工件是jmod和jar文件。可以使用Maven JMod 插件创建 JMod 文件,使用Maven JAR 插件可以创建jar文件。
Maven JLink 插件的配置
要使用 Maven JLink 插件,您必须将其配置为 an extensions
,这意味着您的 pom 文件中的配置必须如下所示:
<project> [...] <build> [...] <plugins> [...] <plugin> <artifactId>maven-jlink-plugin</artifactId> <version>3.1.0</version> <extensions>true</extensions> <configuration> <!-- configuration elements goes here --> </configuration> </plugin> [...] </project>
配置元素包含插件的配置,就像任何其他 Maven 插件一样。可以为此插件配置的不同元素可以由目标文档识别。
要求
根据插件的基础,需要安装 JDK 9。这意味着您要么通过JAVA_HOME配置它,这意味着使用 JDK 9 或通过Toolchains运行整个 Maven 构建。
如何配置与工具链相关的 Maven 可以在工具链文档中阅读。
Maven JLink 插件的使用
您可以像使用 maven-jar-plugin、maven-war-plugin、maven-assembly-plugin 或任何其他生成工件的插件一样使用 maven-jlink-plugin。为工件生成创建一个单独的模块并指定 <packaging>jlink</packaging>
.
使用此插件的另一种方法是将其添加到现有项目中。在这种情况下,您希望在package
阶段中添加显式执行。
假设您有一个多模块结构,其中包含两个模块mod-1和mod-2,您希望将它们放入生成的运行时映像中。
多模块的父级看起来像这样:
<project ...> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.corporate.maven</groupId> <artifactId>maven-parent</artifactId> <version>2.3.1</version> </parent> <groupId>com.corporate.project</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> [...] <modules> <module>mod-1</module> <module>mod-2</module> </modules> [...] </project>
这样一个项目的目录结构如下所示:
. ├── mod-1 │ └── src └── mod-2 └── src
mod-1模块看起来像这样:
<project ...> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.corporate.project</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>mod-1</artifactId> [...] </project>
mod-2模块看起来像这样:
<project ...> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.corporate.project</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>mod-2</artifactId> [...] </project>
如果您想创建模块的 Java 运行时映像,则必须创建一个单独的模块mod-jlink,其中包含创建运行时映像的配置,如下所示:
<project ...> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.corporate.project</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <packaging>jlink</packaging> <artifactId>mod-jlink</artifactId> [...] </project>
目录结构现在如下所示:
. ├── mod-1 │ └── src ├── mod-2 │ └── src └── mod-jlink └── src
在执行此操作之前,您必须将配置添加到父级,如Maven JLink 插件的配置中所示。
现在您需要定义哪些模块应该链接到生成的 Java 运行时映像中,这可以通过将模块定义为mod-jlink模块的依赖项来完成,如下所示:
<project ...> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.corporate.project</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> </parent> <packaging>jlink</packaging> <artifactId>mod-jlink</artifactId> <dependencies> <dependency> <groupId>com.corporate.project</groupId> <artifactId>mod-1</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.corporate.project</groupId> <artifactId>mod-2</artifactId> <version>${project.version}</version> </dependency> </dependencies> [...] </project>
添加适当的配置后,您可以通过从多模块项目的根目录调用来简单地创建 Java 运行时映像,如下所示:
mvn clean package
有一些类似这样的输出行:
[INFO] [INFO] --- maven-jlink-plugin:3.1.0:jlink (default-jlink) @ mod-jlink --- [INFO] Toolchain in maven-jlink-plugin: jlink [ /.../jdk1.9.0_ea+181.jdk/Contents/Home/bin/jlink ] [INFO] The following dependencies will be linked into the runtime image: [INFO] -> module: com.soebes.nine.one.jar ( /.../mod-1/target/mod-1-1.0-SNAPSHOT.jar ) [INFO] -> module: com.soebes.nine.two.jar ( /.../mod-2/target/mod-2-1.0-SNAPSHOT.jar ) [INFO] Building zip: /.../mod-jlink/target/mod-jlink-1.0-SNAPSHOT.zip [INFO]
如果您想将生成的 Java 运行时映像文件安装到本地缓存中,您可以使用以下方法实现此目的:
mvn clean install
或者,如果您想将生成的工件部署到必须使用的远程存储库:
mvn clean deploy
目前,生成的 Java 运行时映像被打包到一个zip存档中,该存档用于将jlink创建的整个结构传输到存储库。
生成的Java 运行时映像目录结构如下所示:
jlink/ ├── bin ├── conf ├── include ├── legal ├── lib └── release