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
相关产品推荐
相关产品推荐

