play sbt dist命令执行停滞无报错问题求助
排查sbt dist无报错卡住的问题
我来帮你梳理下这个棘手的问题——上周还能正常生成分发包,突然就卡住不动还没报错,换系统和旧源码都没用,这种情况大概率和sbt的配置、缓存或者依赖解析有关,给你几个具体的排查步骤:
1. 先消除Java版本兼容警告
你日志里的MaxPermSize警告虽然不一定是直接诱因,但先把配置捋顺避免干扰:
- 找到sbt的配置文件(Windows下是
./sbt-dist/bin/sbtconfig.txt,Linux下可能是~/.sbtconfig或者项目里的sbt配置) - 删除
-XX:MaxPermSize=256m这行,Java 8已经移除了PermGen,换成Metaspace,改成-XX:MaxMetaspaceSize=256m(可以根据项目大小调整数值,比如512m)
2. 排查依赖解析是否卡住
sbt执行dist前会先拉取所有依赖,如果某个仓库访问超时或者不可用,就会静默卡住:
- 执行带调试日志的命令,看具体停在哪个步骤:
# Windows .\sbt-dist\bin\sbt.bat -Dsbt.log.level=debug dist # Linux ./sbt-dist/bin/sbt -Dsbt.log.level=debug dist - 如果日志停在依赖下载环节,试试先单独执行
sbt clean update,看update是否能完成。要是update也卡住,建议切换到国内Maven镜像,修改项目里的build.sbt或者全局sbt配置文件添加镜像地址。
3. 清理sbt和Ivy缓存
缓存损坏是这类无报错问题的常见原因,清理后让sbt重新生成缓存:
- Windows:删除
C:\Users\你的用户名\.ivy2\cache和C:\Users\你的用户名\.sbt目录下的所有内容 - Linux:删除
~/.ivy2/cache和~/.sbt目录下的所有内容 - 清理完后重新执行
sbt dist
4. 确认sbt版本和插件兼容性
虽然你用的是旧源码,但如果sbt版本悄悄变了,或者插件有冲突也可能出问题:
- 检查项目根目录下
project/build.properties里的sbt.version,确认和上周成功时的版本一致 - 如果不确定,试试降级到上周用的sbt版本,或者升级到稳定版再测试
5. 检查系统资源是否充足
sbt打包需要不少内存和CPU资源,资源耗尽也会导致静默卡住:
- Windows打开任务管理器,Linux用
top命令,查看sbt相关进程的内存、CPU占用 - 如果内存不足,修改sbt配置文件里的
-Xmx参数,比如改成-Xmx2G给sbt分配更多堆内存
内容的提问来源于stack exchange,提问作者Beto Figueiredo
相关产品推荐
相关产品推荐

