2

我有一个使用 java8 和 maven 的 java 应用程序,现在我想使用 jdk9 生成一个更小的 jre 来打包我的应用程序,怎么做?如果不可能,你能给我一个maven用jlink生成小的jre演示吗?我的英语不太好,对不起,谢谢。

4

1 回答 1

3

您可以使用 JDeps 分析您对模块的依赖关系

jdeps -summary -recursive --class-path $libs $jar

用您的应用程序 JAR替换$libs所有依赖项(甚至是传递的依赖项;Maven 可以复制它们)和 $jar。然后输出包含对模块的依赖项列表(查找... -> java.*... -> jdk.*)。

如果您使用的是 Linux,则可以使用此管道获取模块名称的排序列表:

jdeps -summary -recursive --class-path 'jars/*' jars/app.jar
    | grep '\-> java.\|\-> jdk.'
    | sed 's/^.*-> //'
    | sort -u

如果您使用的是 Java 10 或更高版本,则可以--print-module-deps使用-summary.

获取该列表并将其输入jlink

jlink
    --module-path $jdk/jmods
    --add-modules $modules
    --output minimal-jre

如果您还想绑定所有平台服务,请输入--bind-services.

以下行将列出您确定的所有模块以及它们的依赖项,可能还有它们绑定的服务:

minimal-jre/bin/java --list-modules
于 2018-05-17T13:51:20.130 回答