You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Compose Multiplatform打包DMG缺失javax.script依赖问题求助

桌面应用Nashorn脚本引擎Mac DMG运行失败排查

问题背景

桌面应用通过ScriptEngine实现脚本功能,由于JDK 11后ScriptEngine被移除,添加了以下依赖:

implementation("org.openjdk.nashorn:nashorn-core:15.3")

示例代码如下:

val manager = ScriptEngineManager()
val engine = manager.getEngineByName("javascript")
val hookJsCode = """
    function test(){
        return 10;
    }
"""
engine.eval(hookJsCode)
val result = engine.eval("test()")
println(result.toString())

问题现象

  • 直接运行Jar包时功能正常
  • 使用Zulu OpenJDK 18打包Mac DMG文件后,应用运行失败(Windows平台打包的MSI文件运行正常)
  • 错误提示:无法找到JavaScript脚本引擎

可能的解决方案

1. 显式初始化Nashorn引擎

避免依赖ScriptEngineManager的自动扫描,直接通过Nashorn的工厂类创建引擎:

import org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory

val factory = NashornScriptEngineFactory()
val engine = factory.getScriptEngine()
// 后续业务代码保持不变

2. 检查打包配置,确保依赖被正确包含

使用jpackage打包DMG时,需确保nashorn-core-15.3.jar被正确加入应用类路径:

  • 若使用Gradle/Maven插件打包,确认依赖传递性被正确处理,打包产物中包含该Jar包
  • 手动执行jpackage命令时,可通过--input参数指定依赖Jar所在目录,或添加--add-modules org.openjdk.nashorn确保模块被打包进应用

3. 验证Mac应用安全设置

Mac系统可能阻止未签名的第三方Jar包加载,可尝试:

  • 右键点击应用,选择「打开」绕过首次运行的安全验证
  • 若应用未签名,完成代码签名后重新打包

内容的提问来源于stack exchange,提问作者stars-one

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 02:22:32