Sbt 如何显示用于运行任务的类路径?

Sbt 如何显示用于运行任务的类路径?,sbt,Sbt,如何在SBT 0.13下显示用于运行任务的类路径 我在这里找到了一些信息: 我最近正在转储我的类路径,作为解决构建问题的一种方法,也许此任务也可以帮助您: lazy val printClasspath = task { this.runClasspath.getPaths.foreach(println); None } runClasspath是一个PathFinder[1]实例,您可以进一步查询它。我想建立一个“:”分隔的路径列表将很容易 我不明白我应该在哪里以及如何使用这个技巧

如何在SBT 0.13下显示用于运行任务的类路径

我在这里找到了一些信息:

我最近正在转储我的类路径,作为解决构建问题的一种方法,也许此任务也可以帮助您:

lazy val printClasspath = task {
  this.runClasspath.getPaths.foreach(println);
  None
}
runClasspath是一个PathFinder[1]实例,您可以进一步查询它。我想建立一个“:”分隔的路径列表将很容易


我不明白我应该在哪里以及如何使用这个技巧。请告知。

在build.sbt文件中添加行
lazy val printClasspath…

然后在命令行中运行:


sbt printClasspath

如果我在sbt shell中键入:

inspect run
在其他产出中,我看到:

[info] Dependencies:
[info]  runtime:fullClasspath
那么如果我输入:

show runtime:fullClasspath
我得到如下输出:

 List(
   Attributed(/Users/tisue/Dropbox/repos/euler/target/scala-2.10/classes),
   Attributed(/Users/tisue/.sbt/boot/scala-2.10.3/lib/scala-library.jar))
这可能就是你要找的

您还可以在命令行上以冒号分隔的形式获取它,该格式适合与
java-classpath
一起使用:

export runtime:fullClasspath
哪种打印方式,例如:

/Users/tisue/Dropbox/repos/euler/target/scala-2.10/classes:/Users/tisue/.sbt/boot/scala-2.10.3/lib/scala-library.jar

tl;dr使用上次运行的
或编写自定义任务

最后一轮 使用
最后一次运行
时,应显示整个类路径:

[info] Running main.Main
[debug] Waiting for threads to exit or System.exit to be called.
[debug]   Classpath:
[debug]     /Users/jacek/work/ingrifo/dictionary-spray/target/scala-2.11/classes
[debug]     /Users/jacek/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.4.jar
[debug]     /Users/jacek/.ivy2/cache/io.spray/spray-can_2.11/bundles/spray-can_2.11-1.3.2.jar
[debug]     /Users/jacek/.ivy2/cache/io.spray/spray-io_2.11/bundles/spray-io_2.11-1.3.2.jar
[debug]     /Users/jacek/.ivy2/cache/io.spray/spray-util_2.11/bundles/spray-util_2.11-1.3.2.jar
[debug]     /Users/jacek/.ivy2/cache/io.spray/spray-http_2.11/bundles/spray-http_2.11-1.3.2.jar
[debug]     /Users/jacek/.ivy2/cache/org.parboiled/parboiled-scala_2.11/bundles/parboiled-scala_2.11-1.1.6.jar
[debug]     /Users/jacek/.ivy2/cache/org.parboiled/parboiled-core/bundles/parboiled-core-1.1.6.jar
[debug]     /Users/jacek/.ivy2/cache/io.spray/spray-routing_2.11/bundles/spray-routing_2.11-1.3.2.jar
[debug]     /Users/jacek/.ivy2/cache/io.spray/spray-httpx_2.11/bundles/spray-httpx_2.11-1.3.2.jar
[debug]     /Users/jacek/.ivy2/cache/org.scala-lang.modules/scala-xml_2.11/bundles/scala-xml_2.11-1.0.2.jar
[debug]     /Users/jacek/.ivy2/cache/org.jvnet.mimepull/mimepull/jars/mimepull-1.9.4.jar
[debug]     /Users/jacek/.ivy2/cache/com.chuusai/shapeless_2.11/jars/shapeless_2.11-1.2.4.jar
[debug]     /Users/jacek/.ivy2/cache/io.spray/spray-json_2.11/bundles/spray-json_2.11-1.3.1.jar
[debug]     /Users/jacek/.ivy2/cache/com.typesafe.akka/akka-actor_2.11/jars/akka-actor_2.11-2.3.6.jar
[debug]     /Users/jacek/.ivy2/cache/com.typesafe/config/bundles/config-1.2.1.jar
[debug] Waiting for thread run-main-0 to terminate.
[debug]     Thread run-main-0 exited.
[debug] Waiting for thread default-akka.actor.default-dispatcher-4 to terminate.
要转储类路径的自定义任务 如果需要查看运行任务所依赖的
内容,请使用
inspect

[fullclasspath]> inspect run
[info] Input task: Unit
[info] Description:
[info]  Runs a main class, passing along arguments provided on the command line.
[info] Provided by:
[info]  {file:/Users/jacek/sandbox/so/fullClasspath/}fullclasspath/compile:run
[info] Defined at:
[info]  (sbt.Defaults) Defaults.scala:704
[info] Dependencies:
[info]  compile:run::streams
[info]  runtime:fullClasspath
[info]  compile:run::runner
[info]  compile:run::mainClass
[info] Delegates:
[info]  compile:run
[info]  *:run
[info]  {.}/compile:run
[info]  {.}/*:run
[info]  */compile:run
[info]  */*:run
[info] Related:
[info]  test:run
Dependencies
中有
runtime:fullClasspath
设置,这意味着
run
取决于它的值

根据SBT
help
fullClasspath

[fullclasspath]> help fullClasspath
The exported classpath, consisting of build products and unmanaged and managed, internal and external dependencies.
您只需解析
运行时:fullClasspath
设置的值

[fullclasspath]> show runtime:fullClasspath
[info] Updating {file:/Users/jacek/sandbox/so/fullClasspath/}fullclasspath...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] List(Attributed(/Users/jacek/sandbox/so/fullClasspath/target/scala-2.10/classes), Attributed(/Users/jacek/.sbt/boot/scala-2.10.3/lib/scala-library.jar))
[success] Total time: 0 s, completed Feb 13, 2014 1:27:38 AM
要获得更可解析的输出,请使用以下任务,该任务的内容为
运行时
范围(
运行时
在Scala/SBT代码中)定义的
完整类路径


不幸的是,
运行时
配置是硬编码的,并且认为接受配置的输入任务会使它变得更好。

或者直接从bash、dash、sh或任何shell:

 sbt 'inspect run' 'show runtime:fullClasspath'


对于Windows命令行。

Doh,你比我快。不过,我希望您不介意我的回答,我的回答更进一步,它显示了一个打印运行时配置的类路径的示例任务。看到我的想法是正确的总是好的。谢谢对于SBT 0.12.X,它似乎只是:
show runtime:full classpath
这是OP的最佳答案。如果您想找到运行任务类路径,您不需要编写任务来完成它。
SBT“导出运行时:fullClasspath”
如果您想使用类路径调用Scala,则将其输出为冒号分隔的列表,这是完美的。@nedim您的注释“+实际上是这里的最佳答案。建议将其设置为一个。您也可以在bash中始终使用双引号。是的,但是一个好的bash插值/替换常规做法可能是”除非需要,否则不要插入/替换”。这就是我对bash使用单引号的原因,在本文中,它是过时的…
lazy val printClasspath…
不是有效的example@EricKolotyluk这句话是问题的引语。我在解释它应该放在哪里。所以你的意思是“在这句话里”“而不是“添加行”?不是。OP在某篇文章中看到一些代码行向构建中添加了任务,但不知道将它们放在哪里。我刚才说“把它们放在build.sbt中”,这就回答了这个问题。诚然,正如Seth Tisue所提到的,有一种方法可以在没有类路径的情况下查看类路径。
 sbt 'inspect run' 'show runtime:fullClasspath'
 sbt "inspect run" "show runtime:fullClasspath"