我创建了一个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添加库...
答案 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,只需阅读整整几次。