当理论上的简单事物在实践中变得不那么简单时,试图掌握SBT和Scala使我的生活变得艰难。
我正在使用使用SBT 0.12.4 的Apache Spark 0.9.0-incubating 。
在他们的SBT构建配置中探讨时,我遇到了如何在SBT(交互式)shell中println
library-dependencies
元素的问题。这是一个更普遍的问题,如何在sbt shell中eval
更复杂的Scala表达式?
> external-mqtt/library-dependencies
[info] List(org.scala-lang:scala-library:2.10.3, io.netty:netty-all:4.0.13.Final, org.eclipse.jetty:jetty-server:7.6.8.v20121106, org.eclipse.jetty.orbit:javax.servlet:2.5.0.v201103041518, org.scalatest:scalatest:1.9.1:test, org.scalacheck:scalacheck:1.10.0:test, com.novocode:junit-interface:0.9:test, org.easymock:easymock:3.1:test, org.mockito:mockito-all:1.8.5:test, commons-io:commons-io:2.4:test, commons-io:commons-io:2.4, org.eclipse.paho:mqtt-client:0.4.0)
我设法做了以下
> eval libraryDependencies in externalMqtt
[info] ans: sbt.SettingKey[Seq[sbt.ModuleID]] = sbt.Scoped$$anon$1@aa3170e
但我很难从Seq[sbt.ModuleID]
中获取sbt.SettingKey
。
非常感谢关于如何进行的简明解释。感谢。
答案 0 :(得分:3)
如果您首先进入:
,而不是使用eval
consoleProject
然后您可以将.eval
附加到设置,例如
> consoleProject
[info] Starting scala interpreter...
[info]
import sbt._
import Keys._
import currentState._
import extracted._
import cpHelpers._
Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
scala> (fullClasspath in Compile).eval.foreach(println)
Attributed(/Users/tisue/Dropbox/repos/euler/target/scala-2.10/classes)
Attributed(/Users/tisue/.sbt/boot/scala-2.10.3/lib/scala-library.jar)
这不直接回答你的问题;我不知道如何让eval
做你想做的事。正如在http://www.scala-sbt.org/release/docs/Detailed-Topics/Console-Project.html中所记录的那样,并且在上面的记录中实际可见,consoleProject
执行了许多导入有用的名称和含义的导入,这就是上述工作的原因。您可能期望eval
会在相同标识符和含义在范围内的上下文中评估您传递的代码,但事实并非如此。 (我尝试将相同的导入到eval
的调用中,但它不起作用。)
不是最好的答案 - 也许其他人可能更具权威性。