【发布时间】:2019-09-09 00:14:18
【问题描述】:
我正在努力采用jlink,以便创建一个更小的运行时来嵌入免费软件包的 macOS 应用程序版本,并且我几乎可以使用它(我的应用程序从大约 260MB 缩小到 90MB)。我遇到的问题是我的软件使用 ZIP 文件系统,并且当它在使用 jlink-created 运行时运行时尝试打开这样的文件系统时,与正常 OpenJDK 11 运行时一起工作的代码突然崩溃:
java.nio.file.FileSystems.newFileSystem
java.nio.file.ProviderNotFoundException: Provider not found
我假设这是因为 jlink 无法在没有被告知 ZIP 文件系统支持应该包含在我的运行时中的情况下知道,因为我的代码没有明确提及它的任何类(它们通过 java.nio 间接使用)。
那么有谁知道我如何明确告诉jlink 包含它们?
【问题讨论】:
-
jlink
--suggest-providers选项在这里可能有用。更具体地说,在 jlink 命令末尾的--suggest-providers java.nio.file.spi.FileSystemProvider将找到提供此服务的模块。在这种情况下,它会告诉您jdk.zipfs是您想要的服务提供者模块。