【问题标题】:Using eval to println elements of library-dependencies in SBT 0.12.x shell在 SBT 0.12.x shell 中使用 eval 打印库依赖项的元素
【发布时间】:2014-02-16 12:56:40
【问题描述】:

试图掌握 SBT 和 Scala 有时会让我的生活变得艰难,因为理论上简单的事情在实践中变得不那么简单。

我正在与使用 SBT 0.12.4Apache Spark 0.9.0-incubating 合作。

在查看他们的 SBT 构建配置时,我遇到了一个问题,即如何在 SBT(交互式)shell 中使用 library-dependenciesprintln 元素。这是一个更普遍的问题,如何在 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

但我正在努力从sbt.SettingKey 中取出Seq[sbt.ModuleID]

非常感谢您对如何进行的简要说明。谢谢。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    如果您首先进入:而不是您使用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 中,但没有成功。)

    不是最好的答案——也许其他人可以更权威。

    【讨论】:

    • 你说0.12,我用的是0.13,不知道有没有关系。
    • 是的,我知道consoleProject 及其带来的好处,但我认为这也可以让eval 更愉快。我接受你的回答,即使“这不能直接回答你的问题”。谢谢赛斯!
    猜你喜欢
    • 2017-08-19
    • 2016-12-11
    • 2014-12-11
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2015-08-26
    • 2018-03-20
    相关资源
    最近更新 更多