使用eval在SBT 0.12.x shell中打印库依赖项的元素

时间:2014-02-15 13:13:03

标签: scala sbt

当理论上的简单事物在实践中变得不那么简单时,试图掌握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

非常感谢关于如何进行的简明解释。感谢。

1 个答案:

答案 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的调用中,但它不起作用。)

不是最好的答案 - 也许其他人可能更具权威性。