Work, Work~

在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

image.png
这个参数会使用.sbt目录中默认的配置将idea.sbt中所指定的仓库地址覆盖掉, 所以就找不到这两个包了. 将这个配置去掉, 即恢复正常.
上一篇下一篇

猜你喜欢

热点阅读