IntelliJ无法导入sbt项目。

72

我已经将IntelliJ从CE 2017.2.5升级到版本CE 2017.3,但现在我无法构建我的sbt项目。构建在第一步卡住了:

"Build: sync
  MyProjName: syncing...
   dump project structure from sbt"

我已经删除了.idea目录和MyProjName/project/target目录。 我通过命令行进行了sbt构建,这个过程顺利完成。 然后我再次启动IntelliJ并尝试将MyProjName/build.sbt作为项目导入。 我也已经登出/登录过。 我做了很多次,但导入始终无法超越此步骤。

我在防火墙后工作,但我已经检查了我的代理设置,它们是正确的并且与先前的版本没有更改(如果有影响)。

如何排除故障/修复问题?

sbt版本为0.13.6。 Scala插件2017.3.10.

来自日志:

IDE: IntelliJ IDEA (build #IC-173.3727.127, 27 Nov 2017 09:32)
OS: Windows 7 (6.1, amd64) 
JRE: 1.8.0_152-release-1024-b6 (JetBrains s.r.o) 
JVM: 25.152-b6 (OpenJDK 64-Bit Server VM) 

5
对我来说,在Ultimate 2017.3上完成这一步骤花了将近一个小时的时间。 - fR0DDY
2
也许这与 https://youtrack.jetbrains.com/issue/SCL-13147 有关。 - Mark Canlas
1
FYI,新版IntelliJ已经发布。或许可以试试看?2017.3.3 - Mark Canlas
1
不行,导入一个大型多模块项目仍然需要很长时间。 - rabejens
在2017年3月4日,也花了很长时间才完成。 - Mahdi
显示剩余8条评论
14个回答

94

我按照以下信息解决了同步问题: https://youtrack.jetbrains.com/issue/SCL-13024

关键信息是:“似乎sbt正在尝试重新解析根本不存在的sbt插件的'sources'和'docs'。如果禁用下载“库源”和“sbt源”的属性,则转储结构的时间从“永远”减少到不到1分钟。”

也就是说,在IntelliJ IDEA中,清除偏好设置下Build Tools sbt的“项目级别设置”下的“Library sources”复选框,如下图所示:

进入图片描述


这是唯一一个在2017.3.4社区版上对我有效的方法。 - nont
这对我在2017.3.4社区版上使用3G热点有效。 - vpipkt
这在2018.1上可行,只是提醒您在访问其引用时仍然可以下载源代码(对我来说似乎更快,因为我会按需下载它们)。 - Wesley Schleumer de Góes
在2018.1.4上工作过。 - Henry
对我来说在2019.1上可以工作。谢谢! - slugmandrew
在2019.2.4上工作过。谢谢! - Jiayi Liao

15

我能想到的唯一解决办法就是在 SBT 控制台 / 命令行中先运行 sbt clean compile,然后在 IntelliJ 中刷新 SBT 项目。


我已经安装了最新的2017.3.3版本(构建于2018年1月15日),并打开了我的项目。它开始“从sbt转储项目结构”,所以我停止了该过程,并在sbt控制台中尝试了“clean compile”。错误:“没有可用的有效解析器”。 - radumanolescu
刷新可以通过点击文件->同步来完成。 - bobismijnnaam

11
  • 按下 Alt F12 快捷键或使用 sbt shell 在 IDEA 中打开终端。
  • 运行 sbt 命令,如果是第一次运行会花费一些时间。
  • 运行 clean 命令。
  • 运行 compile 命令,它将下载项目中所需的依赖项。
  • 关闭 IDEA 项目 (File -> Close Project) 并重新打开它。

注意: 如果在屏幕右下角出现导入提示,请激活 Enable auto-import,如果您不想保持其启用状态(比如我),请按 Import,取消同步,然后再次点击 Refresh sbt project。在同步过程中尝试使用导入时,它会被卡在dump project structure from sbt消息处。

Refresh sbt project位于 Build Sync 窗口的此角落 - 如下图所示:

Refresh sbt project

1
这是可行的解决方案。这应该被标记为答案。 - Oomph Fortuity

6

我还没有找到在IntelliJ Idea CE 2017.3中使这个功能生效的方法,因此我回退到了CE 2017.2.5


我在这个问题下添加了一个新的答案。如果我的解决方案有效,请让我知道。 - marios

6

IntelliJ似乎限制了已经很慢的sbt update的效率。我建议使用sbt-coursier代替。它是专门为改善依赖项更新时间而编写的,在我参与的一个大型项目中,它将依赖项更新时间提高了约两个数量级。

  1. Preferences > Build, Execution, Deployment > Build Tools > sbt中取消勾选“Use auto-import”,以防止IntelliJ自动更新导入。

enter image description here

  1. 在项目的build.sbt文件中添加addSbtPlugin("io.get-coursier" % "sbt-coursier" % "1.0.3")
    • 或在~/.sbt/1.0/plugins/build.sbt中全局安装它
  2. 在命令行上运行sbt update

如果您看到[error] java.lang.NoClassDefFoundError: org/vafer/jdeb/Console,那么请将以下内容添加到~/.sbt/1.0/sbt-coursier.sbt.

import coursier.Keys._
classpathTypes += "maven-plugin"

关于该错误的更多信息,请参见coursier问题#450

  1. (可选) 重新启用步骤1中的自动导入,因为后续的事务依赖项更新可能会更快。

4

我做的是在IntelliJ中增加SBT内存。在我的Mac上:首选项 -> 构建,执行,部署 -> sbt 然后将“最大堆大小”从768MB更改为2048MB,几分钟后一切都成功导入。


我已经安装了最新的2017.3.3 (built 2018-01-15)版本,并将最大堆大小设置为4096 Mb,但仍无法完成“从sbt中转储项目结构”的操作。 - radumanolescu
第一次可能需要一些时间。你等了多久? - marios
这次安装只需要10-20分钟。上一次我安装2017.3时等了11个小时,所以我对这个特定的错误没有太多耐心。我重新安装了2017.2,它立即正常工作了。 - radumanolescu
1
我已经删除了.sbt/0.13/目录。然后花了大约10分钟(第一次)。我不知道更改最大堆是否有帮助。 - ioleo
既然你提到了,我也删除了.sbt/0.13/。可能是删除和内存增加起了作用。 - marios

4
我遇到了相同的问题!我删除了目录~/.sbt/0.13,然后它就可以工作了。您可以删除您使用的sbt目录。

我刚刚尝试了一下,对我来说没有任何区别。 - radumanolescu
1
删除后,我按照Mario的建议增加了最大堆大小。然后它花费了约10分钟(第一次)。我不知道更改最大堆是否有帮助。 - ioleo

2

对我而言,仅需勾选 使用sbt shell进行构建和导入 即可。


2

自定义的SBT版本适用于我。

IntelliJ IDEA偏好设置 -> 构建、执行、部署 -> 构建工具 -> sbt -> 启动器

选择自定义

自定义SBT截图


1
有一个旧的项目出现了这个问题。通常会执行rm -rf .idea操作并重新导入,但它一直卡住。尝试了各种方法,但最终解决问题的不仅仅是删除顶层的target文件夹,而是执行以下操作:
find . -name target -type d -exec rm -rf {} \;

下一步的打开/导入操作非常顺利。(这是在2018.1.5、2018.1.6和2018.2 RC上进行的。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接