【问题标题】:How to force sbt to redownload dependencies when ivy cache corruptedivy缓存损坏时如何强制sbt重新下载依赖项
【发布时间】:2016-01-30 20:05:56
【问题描述】:

当常春藤缓存损坏时,我从 sbt 收到以下错误

[错误] 未解决的依赖关系:commons-codec#commons-codec;1.10:在 commons-codec#commons-codec 中找不到配置; 1.10:'主(编译)'。缺少配置:“编译”。 com.typesafe.play#play_2.11;2.4.3 compile 需要它

如果我删除 ivy 缓存中的 commons-codec 文件夹并运行 sbt update,sbt 将重新下载依赖项,一切都会好起来的。

有没有办法告诉 sbt 删除文件夹并自动重新下载依赖项?

【问题讨论】:

    标签: sbt


    【解决方案1】:

    其实很简单

    rm -fr ~/.ivy2/cache # Or mv ~/.ivy2/cache ~/.ivy2/cache_bk
    sbt update
    

    最后,如果你在 Intellij 中,文件 -> 使缓存无效/重新启动。

    我刚刚在 20 分钟前做了同样的事情。恐怕也不是坏事。我刚刚在我的 Mac 上节省了一大块空间。

    Atom:~ me$ du -skh ./.iv*
    349M    ./.ivy2
    1.0G    ./.ivy2_bak
    

    [2021 年 5 月 6 日添加]

    如果您删除 ~/.ivy2 并且您的所有内容仍然在不重新下载的情况下组装、清理、测试等,您可能正在使用另一个工具,例如 sdkman,它将缓存文件放在不同的位置。像这样擦除缓存。

    pwd
    ~/Library/Caches/Coursier/v1/https/repo1.maven.org
    mv ./maven2/ ./_maven2-backup 
    

    请注意,最好备份您的缓存文件,而不仅仅是擦除它们。在某些情况下,例如内部开发的坏包,您可能需要从备份复制到新的下载。备份它,重建你的项目,然后 rm -fr 备份。

    【讨论】:

    • 我不能这样做:这将导致我所有的常春藤缓存重新下载。我不想浪费时间重新下载很好的依赖项。尤其是当我在旅途中遇到不好的连接时。顺便说一句,我希望 sbt 自动完成。如果我必须去 ivy 缓存,我可以手动删除损坏的 deps。
    • 是的,我听到了。我也经常手动删除。我也不为 SBT 做贡献,但我同意它似乎应该是一个类似 >sbt clean-dependencies 或其他东西的功能,而不仅仅是 >sbt clean。祝 Camilo,LMK 好运,如果你能找到比常春藤缓存更好的方法。
    【解决方案2】:
      # empty the ivy cache if you have good network
      # rm -rfv ~/.ivy2/cache/*
    
      # or even better just backup it to sync it later on ...
      # mv ~/.ivy2/cache ~/.ivy2/cache.`date "+%Y%m%d_%H%M%S`.bak
    
    
      # remove all sbt lock files
      find ~/.sbt ~/.ivy2 -name "*.lock" -print -delete
      find ~/.sbt ~/.ivy2 -name "ivydata-*.properties" -print -delete
    
    
      # remove all the class files
      rm -fvr ~/.sbt/1.0/plugins/target
      rm -fvr ~/.sbt/1.0/plugins/project/target
      rm -fvr ~/.sbt/1.0/target
      rm -fvr ~/.sbt/0.13/plugins/target
      rm -fvr ~/.sbt/0.13/plugins/project/target
      rm -fvr ~/.sbt/0.13/target
      rm -fvr ./project/target
      rm -fvr ./project/project/target
    
      sbt clean update
    

    【讨论】:

    • 我不能这样做:这将导致我所有的常春藤缓存重新下载。我不想浪费时间重新下载很好的依赖项。特别是当我在旅途中遇到不好的连接时。顺便说一句,我希望 sbt 自动完成。如果我必须去 ivy 缓存,我可以手动删除损坏的 deps
    • 是的,删除应该小心完成,更好的选择是不时实际备份目录并将其与新目录合并,因为 sbt 有它自己的缺陷......对我来说,旧版本的 coursier 工作得更好,但对于 sbt 1.0 不再适用了......无论如何我发布这个的原因是事实,一个人必须注意那些目标目录...... IMO 并且基于很多经验在那些目录中发生了一些可疑的事情,特别是如果你是那种一直使用 Ctrl+C 的人(就像我一样)......
    【解决方案3】:

    尝试删除导致问题的特定依赖项:

    rm -rf ~/.ivy2/cache/commons-codec
    

    【讨论】:

    • 这是我以前做的,我的问题是关于 sbt 的自动解决方案。不是我必须维护的手动解决方案
    猜你喜欢
    • 2018-09-14
    • 2012-11-13
    • 2015-11-05
    • 2017-02-26
    • 1970-01-01
    • 2020-07-20
    • 2021-10-19
    • 2020-08-10
    • 2012-01-03
    相关资源
    最近更新 更多