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

