如何在IntelliJ Idea中添加ScalaScriptEngine库

时间:2014-08-30 15:06:31

标签: scala intellij-idea

我创建了一个libs文件夹,并在其中放置了scalascriptengine-1.3.9-2.11.0.jar。之后,我右键点击了.jar并选择了Add Library

然后,我创建了Test.scala

import java.io.File

import com.googlecode.scalascriptengine.ScalaScriptEngine

object Test {
  def main(args: Array[String]): Unit = {
    val sourceDir = new File("examples/folder")
    val sse = ScalaScriptEngine.onChangeRefresh(sourceDir)
  }
}

它正确识别ScalaScriptEngine,或者至少它没有发出任何警告或错误。但它没有编译。

根据library page编辑我的build.sbt

name := "ScalaScriptEngineTest"

version := "1.0"

libraryDependencies += "com.googlecode.scalascriptengine" %% "scalascriptengine" % "1.3.10"

libraryDependencies += "org.scala-lang" % "scala-compiler" % "2.11.1"

但是在刷新之后,我得到了这个:http://pastebin.com/GdirttUJ

我错过了什么?我正在学习scala,这是我第一次尝试向IntelliJ Idea添加库...

1 个答案:

答案 0 :(得分:1)

简答:

更改build.sbt中的两个依赖项,如下所示:

libraryDependencies += 
  "com.googlecode.scalascriptengine" % "scalascriptengine" % "1.3.9-2.10.3"

libraryDependencies += "org.scala-lang" % "scala-compiler" % "2.10.4"

注意我不只是更改版本 - 我用%%替换你的%%。

这会导致您使用较旧版本的ScalaScriptEngine,我不知道这是否会对您造成任何问题。

如果您正在使用sbt构建依赖项,则无需手动将jar放置在任何位置。

<强>解释

从您的日志中我看到sbt正在寻找ScalaScriptEngine for Scala 2.10。事实上,很明显你正在运行Scala 2.10.4,即使你的sbt文件表达了对2.11编译器的依赖,这实际上与使用ScalaScriptEngine的指令一致。

在日志的第23行,您可以准确地看到它所在的位置。如果您将浏览器指向一部分that path,您将看到Scala 2.11和另一个目录scalascriptengine的版本没有版本限定符。如果你潜入后者,你会发现它们保留了所有旧版本。没有针对Scala 2.10编译的ScalaScriptEngine 1.3.10(您要求的那个),因此您的选择似乎是升级到Scala 2.11(如果您想使用IntelliJ Idea的紧密集成,我认为目前无法使用它使用sbt),或者您可以使用ScalaScriptEngine 1.3.9。

您的Scala编译器依赖项基本上存在同样的问题 - 它需要您正在使用的Scala版本。

我已经使用Scala 2.10.4确认了上述解决方案。我正在快速松散地播放它因为没有2.10.4的预编译版本,而且我认为2.10.3版本可能会起作用。

<强>备选方案:

可能有一种更清晰的方法可以解决这个问题,但存储库的组织方式让我对此表示怀疑。

您可以使用您选择的编译器构建您选择的版本,或者说服ScalaScriptEngine社区为您执行此操作并将其放入中央存储库,但我的猜测是1.3.10不会构建任何内容低于Scala 2.11。

最后,如果您确实想手动下载jar,可能需要阅读sbt documentation的“Unmanaged dependencies”部分。实际上,如果您打算使用sbt,只需阅读整整几次。