使用 jlink 优化胖 Jar 文件的 JVM 模块

use*_*877 4 java jlink java-platform-module-system java-9

JDK9 最酷的功能之一是jlink,它制作了 JVM 的一个小型优化版本来运行应用程序,这对于在像 docker 这样的容器中运行应用程序非常有用。然而,仅仅传递您拥有的 JAR 文件并获得优化的运行时来运行它并不是很简单。

就像我使用 Gradle 并创建一个 fat jar 文件(所有依赖项都在一个 jar 文件中)一样,我只是想使用这个 jar 文件来为其生成 JVM?有什么解决办法吗?

Nic*_*lai 6

使用 JDeps 分析项目的依赖关系

jdeps --list-deps app.jar
Run Code Online (Sandbox Code Playgroud)

然后从该列表中提取所有平台模块(以java.jdk.开头的模块)并将它们输入jlink

jlink --add-modules $REQUIRED-PLATFORM-MODULES --output jdk-for-app
Run Code Online (Sandbox Code Playgroud)

核实:

jdk-for-app/bin/java --list-modules
Run Code Online (Sandbox Code Playgroud)

这包括您确定的所有平台模块及其依赖项。

  • Nicolai - 您可能想稍微扩展一下以提及可能需要的服务提供商。jlink 可以帮助识别要包含的候选模块,但它确实需要对应用程序中的所有内容有充分了解的人才能知道可能需要什么(例如其他加密提供程序)。 (2认同)