我有一个旧版本的jar,现在我想用jlink生成一个更小的jre,怎么做呢?

时间:2018-05-17 09:01:37

标签: java java-9 jlink

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

1 个答案:

答案 0 :(得分:3)

你可以use JDeps to analyze your dependencies on modules

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

$libs替换为您的应用程序JAR的所有依赖项(甚至是传递的; Maven can copy them)和$ 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