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

发布Scala库至Maven Central遇gpg签名错误:inappropriate ioctl for device

解决SBT publishSigned时GPG签名失败的问题

针对性解决方案

  • 确保GPG_TTY在SBT启动前生效
    若通过终端启动SBT,修改~/.bashrc(而非仅~/.bash_profile,后者仅在登录shell加载),添加:

    export GPG_TTY=$(tty)
    

    执行source ~/.bashrc后,重新启动SBT shell。

  • 直接在SBT会话中配置环境变量
    启动SBT后,在shell内运行:

    !export GPG_TTY=$(tty)
    

    或添加JVM参数:

    set javaOptions += s"-DGPG_TTY=${sys.env("GPG_TTY")}"
    

    之后再执行publishSigned。

  • 启用GPG代理配合SBT
    先启动gpg-agent:

    gpg-agent --daemon
    

    在build.sbt中添加配置,让SBT通过代理获取凭据:

    useGpgAgent := true
    
  • 明确指定GPG程序路径
    若系统存在多个GPG版本,在build.sbt中指定实际路径:

    gpgCommand := "/usr/local/bin/gpg" // 替换为你的GPG实际路径
    
  • 先验证GPG基础功能
    在终端执行echo "test" | gpg --clearsign,确认能正常弹出密码提示并完成签名。若此步骤失败,优先排查GPG密钥配置、密码正确性等基础问题。

额外注意事项

  • 若使用zsh,需修改~/.zshrc添加export GPG_TTY=$(tty),执行source ~/.zshrc后生效。
  • 避免使用IDE内置终端运行SBT,部分IDE终端无法正确传递TTY给GPG,建议用系统原生终端(如Terminal.app、iTerm2)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:30:16