java - 创建专用于特定模块化应用程序的自定义运行时镜像

标签 java java-9 jlink java-module jdeps

假设我正在开发一个由 2 个模块组成的模块化应用程序:com.spacey.explorer 依赖于 com.spacey.rocket 模块。我在一些 bin 目录中有他们的模块化 JAR 文件。

我想准备轻量级的 JRE 来运行它。很明显,我使用了 jlink 工具:

$ jlink --module-path /opt/jdk-9/jmods:../bin --add-modules com.spacey.explorer --output ~/custom-jre3

现在,当我在我的 JRE 中列出模块时,我得到以下信息:

$ java --list-modules 
com.spacey.explorer
com.spacey.rocket
java.base@9

也就是说,我的应用程序模块被捆绑到 JRE 中。但是,如果我想构建一个仅包含足以运行我的应用程序保持我的应用程序模块独立的 JDK 源模块的 JRE,我必须知道我的 JDK 是什么依赖项是(在示例中这只是 java.base)并像这样明确指定它们:

$ jlink --module-path /opt/jdk-9/jmods --add-modules java.base --output ~/custom-jre3

有没有办法让 jlink 为我做这件事?或者有什么工具可以帮我找出那些源自 JDK 的依赖项?

最佳答案

您可以使用 jdeps工具。可能有帮助的选项是:

jdeps --list-deps <path>

Lists the dependences and use of JDK internal APIs.

哪里<path>可以是 .class 文件、目录、JAR 文件的路径名。

注意:使用jdeps -help列出所有选项及其语法。你可以使用


例如,我在我的机器 .m2 文件夹中尝试了一个 jar 文件,它会被视为一个未命名的模块,例如:

jdeps --list-deps /.m2/repository/org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.jar

输出::

java.base
java.desktop
unnamed module: /.m2/repository/org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.jar

你也可以使用

jdeps --jdk-internals --class-path <path> <path>

Finds class-level dependences on JDK internal APIs. By default, it analyzes all classes on --class-path and input files unless -include option is specified.


2017 年 11 月 1 日更新

future revision更改以使用与 jlink 相同的内容如:

jlink --module-path jmods --add-modules $(jdeps --print-module-deps myapp.jar) --output image

关于java - 创建专用于特定模块化应用程序的自定义运行时镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46331306/

相关文章:

java - 混淆后gson的Proguard错误

java - 如何避免使用 spanned fromHtml 的图像?

java - 循环模块依赖在 Java 9 中是否可行?

java - 为什么 javafx-maven-plugin :jlink cause a java. nio.file.AccessDeniedException?

java - MediaStore.Images.Thumbnails 似乎是空的

java - 插入对象时,Google Cloud Storage 在 ACL 定义中期望哪个域?

java - 模块已被弃用并标记为删除

java - 如何将sublime设置为jshell的外部编辑器?

java - 使用 JMod 插件部署应用程序时出现错误 java.util.zip.ZipException : duplicate entry: classes/META-INF/MANIFEST. MF

java - 在 Java 中获取 Mathematica 图像