如何在ivy缓存损坏时强制sbt重新下载依赖项

如何在ivy缓存损坏时强制sbt重新下载依赖项,sbt,Sbt,当常春藤缓存损坏时,我从sbt得到以下错误 [错误]未解析的依赖项:commons codec#commons codec;1.10:在commons codec#commons codec中未找到配置; 1.10:‘主(编译)’。缺少配置:“编译”。它是com.typesafe.play#play_2.11中要求的;2.4.3编译 如果我删除ivy缓存中的文件夹commons codec并运行sbt更新,sbt将重新下载依赖项,一切都会好起来 有没有办法告诉sbt自动删除文件夹并重新下载依赖项

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

[错误]未解析的依赖项:commons codec#commons codec;1.10:在commons codec#commons codec中未找到配置; 1.10:‘主(编译)’。缺少配置:“编译”。它是com.typesafe.play#play_2.11中要求的;2.4.3编译

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

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

这很简单,只要

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备份。

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

  # 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
rm -rf ~/.ivy2/cache/commons-codec

我不能这样做:这将导致我所有的常春藤缓存重新下载。我不想浪费时间重新下载那些没问题的依赖项。尤其是当我和坏关系在一起的时候。顺便说一下,我希望sbt能自动完成。如果我必须去常春藤缓存,我可以手动删除损坏的DEP。是的,我听到了。我也经常这样做手动删除。我也不支持SBT,但我同意它应该是一个类似于>SBT clean dependencies之类的特性,而不仅仅是>SBT clean。祝你好运Camilo,LMK如果你找到一个比使用常春藤缓存更好的方法。我不能这么做:这会导致我所有的常春藤缓存被重新下载。我不想浪费时间重新下载那些没问题的依赖项。尤其是当我和坏关系在一起的时候。顺便说一下,我希望sbt能自动完成。如果我必须去常春藤缓存,我可以手动删除损坏的DEP,删除时应小心,更好的选择是不时实际备份目录并将其与新目录合并,因为sbt有自己的缺陷。。。对我来说,较旧版本的coursier工作得更好,但对于SBT1.0来说,不再是了。。。无论如何,我发布这篇文章的原因是,人们必须注意那些目标目录。。。根据我的经验,很多可疑的事情发生在这些目录中,特别是如果你是那种(像我一样)总是按Ctrl+C键的人……这就是我过去常做的,我的问题是关于sbt的自动解决方案。不是我必须维护的手动解决方案