如何在IDEA中完全清理,重新解析和重建Scala sbt管理的项目?

时间:2015-03-20 12:04:48

标签: scala intellij-idea sbt

TL; DR:如何在SBT文件更改时完全协调IntelliJ中的所有依赖项

我在IntelliJ中设置了SBT项目。在大多数情况下,如果它像魅力一样,但对我来说非常痛苦,要改变依赖项和编译器的版本。

我希望做的是更新我的SBT文件,然后点击IntelliJ中的清理项目之类的内容,以使其更新。

我找到的最佳菜单项是重建项目。它读取新的依赖项,但保留旧的依赖项,因此外部库包含Scala运行时和第三方库的多个版本。

为了解决这个问题,我可以关闭IntelliJ并删除.idea/libraries中的所有文件。当我重新启动IntelliJ时,它将重新解析依赖项。它可以工作,但手动删除元数据文件表明我做错了。

10 个答案:

答案 0 :(得分:9)

在* .sbt文件中进行更改后刷新IntelliJ:

  • 打开“SBT项目”窗格(“菜单视图/工具窗口/ SBT”)
  • 右键单击您的SBT项目
  • 选择刷新外部项目

enter image description here

答案 1 :(得分:7)

保存SBT文件时,IntelliJ IDEA通常会刷新项目。但如果没有,你可以手动完成。

SBT面板中有一个刷新所有SBT项目按钮:

enter image description here enter image description here

在IDEA仍然感到困惑的情况下,没有找到刚添加的软件包:

从“文件”菜单中:

Invalidate Cache ScreenShot

这是一个相当大的锤子,需要重新启动应用程序,并且需要多分钟重建IntelliSense索引。但偶尔也会让IDEA认识到你的新SBT包装。

答案 2 :(得分:4)

之前发生在我身上,是的,是PITA。

我通常做的是手动删除项目中的依赖项,所有这些依赖项,然后让sbt重新导入实际需要的内容。不要在用户界面上这样做,因为即使有多个选择,也会要求确认每个依赖! (您将点击"是的,我确定"确保"一小时),而是直接从.iml目录上的.idea/modules项目文件中删除。 / p>

答案 3 :(得分:2)

尝试以下步骤:

  1. 关闭IntelliJ
  2. 备份整个项目文件夹
  3. 删除.idea文件夹
  4. 删除目标文件夹
  5. 删除项目/目标文件夹
  6. 重新打开IntelliJ并导入为sbt项目
  7. 请注意,这仅适用于SBT项目

答案 4 :(得分:1)

另一把重锤似乎有效。

  1. 关闭IntelliJ
  2. 删除* I want to understand what this method does!文件夹
  3. 从现有来源导入应用

答案 5 :(得分:1)

我在不同的项目中使用了不同版本的sbt和scala,并且IntelJi在某种程度上感到困惑。我只能通过删除sbtivy2缓存文件夹来解决问题:

rm -rf ~/.ivy2
rm -rf ~/.sbt

答案 6 :(得分:0)

同意,那是PITA。没有什么帮助我(我尝试“无效/重启”,从“.idea / libraries”中删除文件并重新启动)。

解决这个问题的唯一方法是从IntelliJIdea缓存中手动删除与项目相关的文件夹。我从以下地方删除了这些文件夹(我使用OSX和IntelliJ-Idea 14):

  • /用户/ {名} / Library /缓存/ IntelliJIdea14 /编译器/ {项目名}
  • /用户/ {名} / Library /缓存/ IntelliJIdea14 /编译服务器/ {项目名}

这对我有所帮助,希望能为某人节省时间。

答案 7 :(得分:0)

IDEA 2016.2.4

这些解决方案都不适合我。

****在您尝试上述任何一项之前。在问题中备份SBT / IDEA项目*****

如果我更新了'build.sbt',那么项目视图上的外部库依赖项就不会更新。此外,项目结构仍显示旧的依赖项。无论我尝试什么,IDEA都不会刷新。

我可以获得部分恢复的唯一方法是从另一台机器复制'.idea'文件夹。 SBT插件实现已经过了!我事先删除了'.idea / libraries'文件夹,然后IDEA没有恢复此文件夹。我多次尝试导入项目。

非常糟糕 :(

ADDENDUM:我设法使我的项目有效。我认为与IDEA的SBT不再完全是错误的。可能我的Apache Ivy 2缓存可能已损坏。所以我执行了以下命令:

$ rm -rf ~/.ivy2/cache/org.scalatest/scalatest_2.11/*
$ rm -rf ~/.ivy2/cache/org.scalactic/scalactic_2.11/*

在文件下拉菜单项下使用无效缓存重新启动IDEA。这似乎引发了IDEA和SBT的一些内部行动。我也试过在IDE中手动添加添加JAR,但是它被大量混淆了。故事的道德是每天在两台不同的笔记本电脑上工作并保持更新。

也可以从命令行中仔细检查SBT。我当时正在使用0.13.12

$ sbt about
$ sbt clean
$ sbt test

还要重新检查SBT依赖项插件。

答案 8 :(得分:0)

对我有用的是:

1)关闭IntelliJ

2)删除listing_ID list_expires buyer_ID sold_price 内幕

3)启动IntelliJ

4)右键点击.idea/libraries

之后,外部库中没有旧版本和重复库。

答案 9 :(得分:0)

如果通过终端/外壳/命令提示符使用激活器,请使用以下命令:

activator clean

或者只是通过intellij在sbt shell上“清理”

它应该有助于重置内容,并且下次运行或编译时,应从头开始。