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

Mac下FakeSMTP报IllegalAccessError启动失败问题咨询

问题根因

这个报错属于Java模块系统(JPMS)的访问权限拦截,核心原因是你当前启动fakeSMTP时实际调用的JDK并非你以为的Java 8,而是Java 9及以上版本。
com.apple.eawt是Mac平台专属的Java桌面集成包,在Java 8版本中该包默认对所有类路径下的代码开放访问,不会触发权限报错;Java 9引入模块化系统后,com.apple.eawt被划到java.desktop模块内部,默认不向未命名模块(也就是直接从jar包启动的非模块化应用)导出,才会出现你贴的报错。
你之前4-5年能正常运行,是因为此前终端环境默认调用的是Java 8,近期大概率是安装其他开发工具、系统更新时自动带装了高版本JDK,修改了系统PATH中的Java执行优先级,哪怕你本地留存了jdk1.8.0_261,sudo执行时优先加载的也是高版本Java。

排查步骤
  • 第一步先确认sudo环境下实际生效的Java版本,终端执行命令:
    sudo java -version
    
    查看输出的版本号,如果不是1.8.0_261,即可确认是默认JDK版本被篡改导致的问题。
  • 第二步确认本地Java 8的安装路径,Mac系统JDK默认存放在/Library/Java/JavaVirtualMachines/目录下,执行:
    ls /Library/Java/JavaVirtualMachines/
    
    确认jdk1.8.0_261.jdk目录存在,记录下完整路径。
可行解决方案

按稳定性从高到低排序:

  • 方案1:启动时直接指定Java 8的绝对路径,完全绕开系统默认Java配置,是最稳妥的方案,启动命令参考:
    sudo /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/bin/java -jar fakeSMTP-2.0.jar
    
    执行后即可正常启动程序,不会受后续系统Java版本变动影响。
  • 方案2:修正sudo环境下的默认Java版本。将Java 8的路径配置为shell环境的最高优先级,在对应shell配置文件(~/.bash_profile或~/.zshrc,根据你用的终端选择)中添加JAVA_HOME配置指向Java 8路径,执行source命令加载配置后,用sudo -E参数继承当前用户环境变量启动:
    sudo -E java -jar fakeSMTP-2.0.jar
    
    注意sudo默认会重置用户环境变量,不加-E参数还是会调用系统默认的高版本Java。
  • 方案3:如果必须使用高版本Java启动,添加JVM启动参数强制开放模块访问权限,命令如下:
    sudo java --add-exports java.desktop/com.apple.eawt=ALL-UNNAMED -jar fakeSMTP-2.0.jar
    
    该方案存在后续触发其他内部包访问报错的可能,不推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:31:11