sbt能否用于返回到给定版本的scala库jar的路径?

sbt能否用于返回到给定版本的scala库jar的路径?,sbt,Sbt,我的目标是 # returns /home/user/.sbt/0.12.4/boot/scala-2.9.3/lib/scala-library.jar ./sbt ++2.9.3 library-jar 像这样的事情可能吗?SBT中有一个scalaInstance键,其中包含库jar路径: $ sbt ++2.9.3 "show scalaIntance" [info] Loading global plugins from /home/gourlaysama/.sbt/0.13/plug

我的目标是

# returns /home/user/.sbt/0.12.4/boot/scala-2.9.3/lib/scala-library.jar
./sbt ++2.9.3 library-jar

像这样的事情可能吗?

SBT中有一个
scalaInstance
键,其中包含库jar路径:

$ sbt ++2.9.3 "show scalaIntance"
[info] Loading global plugins from /home/gourlaysama/.sbt/0.13/plugins
[info] Set current project to tmp (in build file:/tmp/)
[info] Setting version to 2.9.3
[info] Set current project to tmp (in build file:/tmp/)
[info] Updating {file:/tmp/}tmp...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Scala instance{version label 2.9.3, actual version 2.9.3, library jar: /home/gourlaysama/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.9.3.jar, compiler jar: /home/gourlaysama/.ivy2/cache/org.scala-lang/scala-compiler/jars/scala-compiler-2.9.3.jar}
[success] Total time: 1 s, completed May 8, 2014 11:09:56 PM
然后必须对输出进行后期处理,以提取库jar路径。注意,如果JAR不存在,这将下载JAR

实际上,您可以使用
consoleProject
(在SBT项目中启动一个scala控制台)获得确切的字符串,但我认为没有一种方法可以在shell中的一个命令中完成这一切:

$ sbt
[info] Loading global plugins from /home/gourlaysama/.sbt/0.13/plugins
[info] Set current project to tmp (in build file:/tmp/)
> ++2.9.3
[info] Setting version to 2.9.3
[info] Set current project to tmp (in build file:/tmp/)
> consoleProject
[info] Starting scala interpreter...
[info] 
import sbt._
import Keys._
import _root_.org.sbtidea.SbtIdeaPlugin._
import _root_.sbt.plugins.IvyPlugin
import _root_.sbt.plugins.JvmPlugin
import _root_.sbt.plugins.CorePlugin
import _root_.sbt.plugins.JUnitXmlReportPlugin
import currentState._
import extracted._
import cpHelpers._
Welcome to Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0).
Type in expressions to have them evaluated.
Type :help for more information.

scala> println(scalaInstance.eval.libraryJar)
/home/gourlaysama/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.9.3.jar
从SBT外部执行上述操作的最佳方法是利用
initialCommands
,如下所示:

sbt "set initialCommands in consoleProject := \"println(scalaInstance.eval.libraryJar); sys.exit()\"" "consoleProject"

这很难看,但它确实有效。当然,在jar路径前后仍然有很多无用的输出行。

您想获取稍后在SBT中使用的路径还是在SBT之外使用的路径?在SBT之外,理想情况下,有没有一种方法可以告诉scala解释器运行一行,然后退出?如果有,这是完美的。@AQuestionAsker没有正确的方法,但有一种不太成熟的方法,请参见编辑。