在IDEA运行基于sbt的Scala报错
2019-06-28 本文已影响0人
海边的贝壳林
问题
在idea上执行命令(比如package)的时候, 会出现如下的异常.
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: FAILED DOWNLOADS ::
[warn] :: ^ see resolution messages for details ^ ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: org.jetbrains#sbt-structure-extractor;2018.2!sbt-structure-extractor.jar
[warn] :: org.jetbrains#sbt-idea-shell;2017.2!sbt-idea-shell.jar
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
sbt.ResolveException: download failed: org.jetbrains#sbt-structure-extractor;2018.2!sbt-structure-extractor.jar
download failed: org.jetbrains#sbt-idea-shell;2017.2!sbt-idea-shell.jar
很明显是下载jar包的时候出错了, 没有找到相应的jar包, 我们去maven仓库mvnrepository.com去查, 确实没有这个jar包. 然后Google查, 在GitHub上的Jetbrain组里找到了这个jar包. 但是这里不清楚怎么让SBT去找到这个jar包.
另外我还比较好奇为什么会有这两个jar包
我用sbt命令行直接打包的时候是可以正常打包的, 所以可看出来这个包应该是idea操作所必须的, 而不是sbt打包所必须的, 当然从包名(sbt-idea-shell)也可以看出来一些端倪.
后来网上发现下面这句话.
The workaround to that seems to be to delete the directory
<user home>/.sbt/<sbt version>/plugins/target/
然后打开我的home/.sbt/0.13/plugins/
目录, 发现确实有个idea.sbt
文件, 注释上写明这个文件是idea的scala插件生成的, 其中已经写明仓库的地址了C:/Users/THZ-064/.IdeaIC2018.2/config/plugins/Scala/repo
, 但是为何没有生效呢?
// Generated by IntelliJ-IDEA Scala plugin.
// Adds settings when starting sbt from IDEA.
// Manual changes to this file will be lost.
if (java.lang.System.getProperty("idea.runid", "false") == "2018.2") scala.collection.Seq(
resolvers += Resolver.file("intellij-scala-plugin", file(raw"C:/Users/THZ-064/.IdeaIC2018.2/config/plugins/Scala/repo"))(Resolver.ivyStylePatterns),
addSbtPlugin("org.jetbrains" % "sbt-structure-extractor" % "2018.2"),
addSbtPlugin("org.jetbrains" % "sbt-idea-shell" % "2017.2")
) else scala.collection.Seq.empty
峰回路转
突然想起在当时在idea中配置sbt的时候使用了一个参数-Dsbt.override.build.repos=true
这个参数会使用
.sbt
目录中默认的配置将idea.sbt
中所指定的仓库地址覆盖掉, 所以就找不到这两个包了. 将这个配置去掉, 即恢复正常.