mal*_*c4k 7 java jlink java-9 jdeps java-module
假设我正在开发一个由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
Run Code Online (Sandbox Code Playgroud)
现在,当我在JRE中列出模块时,我得到以下内容:
$ java --list-modules
com.spacey.explorer
com.spacey.rocket
java.base@9
Run Code Online (Sandbox Code Playgroud)
也就是说,我的应用程序模块捆绑到JRE中.但是如果我想构建一个只有JDK源模块的JRE,这些模块足以运行我的应用程序并保持我的应用程序模块分离,我必须知道我的JDK依赖项是什么(在这个例子中就是这样java.base)并明确指定它们喜欢:
$ jlink --module-path /opt/jdk-9/jmods --add-modules java.base --output ~/custom-jre3
Run Code Online (Sandbox Code Playgroud)
有没有办法让jlink为我这样做?或者任何可以为我找出那些JDK起源的依赖项的工具?
您可以使用jdeps工具.可能有用的选项是:
jdeps --list-deps <path>
Run Code Online (Sandbox Code Playgroud)
列出JDK内部API的依赖性和使用.
where <path>可以是.class文件的路径名,目录,JAR文件.
注意:jdeps -help用于列出所有选项及其语法.您可以使用
例如,我在我的机器.m2文件夹中尝试了一个jar文件,它将被视为一个未命名的模块,如:
jdeps --list-deps /.m2/repository/org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.jar
Run Code Online (Sandbox Code Playgroud)
输出::
java.base
java.desktop
unnamed module: /.m2/repository/org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.jar
Run Code Online (Sandbox Code Playgroud)
你也可以利用
jdeps --jdk-internals --class-path <path> <path>
Run Code Online (Sandbox Code Playgroud)
查找JDK内部API的类级依赖性.默认情况下,它会分析--class-path和输入文件上的所有类,除非指定了-include选项.
以下是使用相同的未来修改变更jlink:
jlink --module-path jmods --add-modules $(jdeps --print-module-deps myapp.jar) --output image
Run Code Online (Sandbox Code Playgroud)
要创建运行时映像,jlink需要指定根模块--add-modules- 从这些模块开始,jlink将构建模块图并在新映像中包含所有已解析的模块.您已经使用过--add-modules com.spacey.explorer,所以jlink包括com.spacey.explorer及其所有依赖项.
相反,只包括com.spacey.explorer依赖的JDK模块,首先需要确定那些,例如使用jdeps(另请参见nullpointer的答案).一旦了解了这些模块,就可以将它们定义为根模块--add-modules.
在你的例子中:
$ jlink
--module-path /opt/jdk-9/jmods
--add-modules java.base
--output ~/custom-jre-for-explorer
Run Code Online (Sandbox Code Playgroud)
如果有更多的模块而不仅仅是java.base,比如说java.sql,那么命令看起来如下:
$ jlink
--module-path /opt/jdk-9/jmods
--add-modules java.base,java.sql
--output ~/custom-jre-for-explorer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |