【问题标题】:java.nio.file.ProviderNotFoundException with jlink created runtimejava.nio.file.ProviderNotFoundException 与 jlink 创建运行时
【发布时间】: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 是您想要的服务提供者模块。

标签: zip nio jlink


【解决方案1】:

当然,发布这个问题后不久,我的google-fu改进了,我找到了答案。在 JDK 11 中,jdk.zipfs 是它自己的模块,包含此提供程序。所以我只需要将它添加到我的--add-modules 列表中,它现在就可以工作了。

【讨论】:

    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2019-04-13
    • 2020-01-17
    • 1970-01-01
    相关资源
    最近更新 更多