You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java 8u171/172 javapackager打包的Native bundle含大量冗余DLL?

关于Java 8u161 vs 8u171/172打包Native Bundle时的DLL差异及必要性分析

我来梳理下你遇到的这个Native打包DLL差异的问题,结合你提到的细节和实际测试情况拆解如下:

  • 不同Java 8版本的打包产物差异
    你通过命令:

    javapackager.exe -deploy -native image -srcfiles <files> -appclass <class> -outdir out -outfile test
    

    为Jar文件生成Native bundle时,不同JDK版本的输出差异很显著:

    • Java 8u161:打包后的bundle仅包含msvcp140.dllpackager.dllvcruntime140.dll,但存在msvcr100.dll缺失的问题(对应Bug JDK-8191176)
    • Java 8u171/172:生成的bundles/AppName/文件夹里多出大量api-ms-win-*系列DLL,且这些DLL大多也存在于JDK安装目录的runtime/bin/
  • 差异的根源
    你提到的OpenJDK提交552ad0172a8c确实是核心原因——这个提交特意将这些api-ms-win-*DLL加入到打包产物中,初衷应该是为了兼容更多Windows系统环境,避免因系统依赖库缺失导致应用无法启动的问题。

  • 额外DLL的必要性探讨
    从你实际测试的结果来看,移除这些api-ms-win-*DLL后应用仍能正常运行,但这里需要注意几个关键问题:

    • 你的测试环境大概率已经预装了这些DLL依赖的系统组件(比如Windows更新推送的通用CRT库),所以移除后不会影响运行
    • 如果用户使用的是较老旧的Windows版本(比如未安装最新补丁的Win7),或者系统缺少相关基础库,移除这些DLL可能会直接导致应用启动失败
    • 目前没有官方文档明确界定这些DLL的必要性,所以全场景的兼容性确实无法100%保证

内容的提问来源于stack exchange,提问作者user2375667

火山引擎 最新活动