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

M1芯片Mac Monterey运行Scala/Play框架Web应用遇JNA加载错误

M1芯片Mac Monterey下Play框架启动报错:JNA临时库加载失败

问题详情

刚接触Mac系统与Scala/Play框架,本地部署Web应用时遇到异常:

  • 用sbt dist构建应用包正常
  • 执行启动命令run -Dconfig.file=./app.conf -Djdk.tls.trustNameService=true -Dhttps.port=8080 -Dhttp.port=8081时,抛出java.lang.UnsatisfiedLinkError,提示无法加载JNA临时库,推测与M1芯片架构相关,系统版本为Mac Monterey。

完整错误栈:

[error] java.lang.UnsatisfiedLinkError: Can't load library:/Users/roozbeh.merandi/Library/Caches/JNA/temp/jna6522888454902179447.tmp
[error]     at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2633)
[error]     at java.base/java.lang.Runtime.load0(Runtime.java:768)
[error]     at java.base/java.lang.System.load(System.java:1837)
[error]     at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:1018)
[error]     at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:988)
[error]     at com.sun.jna.Native.<clinit>(Native.java:195)
[error]     at io.methvin.watchservice.jna.CarbonAPI.<clinit>(CarbonAPI.java:20)
[error]     at io.methvin.watchservice.jna.CFStringRef.toCFString(CFStringRef.java:23)
[error]     at io.methvin.watchservice.MacOSXListeningWatchService.register(MacOSXListeningWatchService.java:127)
[error]     at io.methvin.watchservice.WatchablePath.register(WatchablePath.java:50)
[error]     at io.methvin.watcher.DirectoryWatcher.register(DirectoryWatcher.java:400)
[error]     at io.methvin.watcher.DirectoryWatcher.registerAll(DirectoryWatcher.java:373)
[error]     at io.methvin.watcher.DirectoryWatcher.<init>(DirectoryWatcher.java:193)
[error]     at io.methvin.watcher.DirectoryWatcher$Builder.build(DirectoryWatcher.java:122)
[error]     at play.dev.filewatch.DefaultFileWatchService.watch(DefaultFileWatchService.scala:44)
[error]     at play.dev.filewatch.FileWatchService$$anon$1.watch(FileWatchService.scala:95)
[error]     at play.runsupport.Reloader.<init>(Reloader.scala:443)
[error]     at play.runsupport.Reloader$.reloader$lzycompute$1(Reloader.scala:283)
[error]     at play.runsupport.Reloader$.play$runsupport$Reloader$$reloader$1(Reloader.scala:275)
[error]     at play.runsupport.Reloader$.startDevMode(Reloader.scala:301)
[error]     at play.sbt.run.PlayRun$.devModeServer$lzycompute$1(PlayRun.scala:100)
[error]     at play.sbt.run.PlayRun$.devModeServer$1(PlayRun.scala:83)
[error]     at play.sbt.run.PlayRun$.$anonfun$playRunTask$3(PlayRun.scala:107)
[error]     at play.sbt.run.PlayRun$.$anonfun$playRunTask$3$adapted(PlayRun.scala:67)
[error]     at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] stack trace is suppressed; run last Compile / run for the full output
[error] (Compile / run) java.lang.UnsatisfiedLinkError: Can't load library: /Users/roozbeh.merandi/Library/Caches/JNA/temp/jna6522888454902179447.tmp

解决方案

  • 添加JNA兼容参数:启动命令中加入-Djna.nosys=true,强制JNA用纯Java实现,绕开M1架构兼容问题。修改后命令:
    run -Dconfig.file=./app.conf -Djdk.tls.trustNameService=true -Dhttps.port=8080 -Dhttp.port=8081 -Djna.nosys=true
    
  • 清理JNA缓存:手动删除JNA缓存目录,让系统重新生成适配库:
    rm -rf ~/Library/Caches/JNA/
    
    删除后重新执行启动命令。
  • 切换文件监听实现:在application.conf中添加配置,改用JDK原生文件监听服务:
    play.filewatchService = "play.dev.filewatch.JdkFileWatchService"
    
  • 使用M1兼容JDK:确保当前JDK为arm64架构版本,避免用x86_64架构JDK通过Rosetta转译运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:40:37