Maven JLink 插件用于使用JDK 9创建模块化运行时映像。
要链接到模块化运行时映像的预期工件是jmod和jar文件。可以使用Maven JMod 插件创建 JMod 文件,使用Maven JAR 插件可以创建jar文件。
要使用 Maven JLink 插件,您必须将其配置为扩展,这意味着您的 pom 文件中的配置必须如下所示:
<project>
[...]
<build>
[...]
<plugins>
[...]
<plugin>
<artifactId>maven-jlink-plugin</artifactId>
<version>3.0.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 项目中的单个 Maven 项目创建运行时映像。让我们假设您有一个多模块结构,其中包含两个模块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.0.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