我有一个旧版本的jar,现在我想用jlink生成一个更小的jre,怎么办?
I have a old version jar,now I want to use jlink to generate a smaller jre,how to do it?
我有一个 java 应用程序使用 java8 和 maven,现在我想使用 jdk9 生成一个较小的 jre 来打包我的应用程序,怎么办?
如果不行,能给我一个maven用jlink生成jre的小demo吗?我英文不太好,sorry and thanks.
你可以use JDeps to analyze your dependencies on modules:
jdeps -summary -recursive --class-path $libs $jar
将 $libs
替换为您的所有依赖项(甚至是可传递的依赖项;Maven can copy them)并将 $jar 替换为您的应用程序 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
我有一个 java 应用程序使用 java8 和 maven,现在我想使用 jdk9 生成一个较小的 jre 来打包我的应用程序,怎么办? 如果不行,能给我一个maven用jlink生成jre的小demo吗?我英文不太好,sorry and thanks.
你可以use JDeps to analyze your dependencies on modules:
jdeps -summary -recursive --class-path $libs $jar
将 $libs
替换为您的所有依赖项(甚至是可传递的依赖项;Maven can copy them)并将 $jar 替换为您的应用程序 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