documentation で説明されているように、SBT依存関係ツリーを検査しようとしています。
sbt inspect tree clean
しかし、私はこのエラーを受け取ります:
[error] inspect usage:
[error] inspect [uses|tree|definitions] <key> Prints the value for 'key', the defining scope, delegates, related definitions, and dependencies.
[error]
[error] inspect
[error] ^
なにが問題ですか? SBTがツリーを構築しないのはなぜですか?
コマンドラインから実行する場合、sbtに送信される各引数はコマンドであると想定されるため、sbt inspect tree clean
willは次のようになります。
inspect
コマンドを実行し、tree
コマンドを実行し、clean
コマンドinspect
には引数が必要なので、これは明らかに失敗します。これはあなたが望むことをします:
sbt "inspect tree clean"
タスクの依存関係(inspect tree
が表示するもの)ではなく、ライブラリの依存関係(Mavenの場合と同様)を実際に表示する場合は、 sbt-dependency-graphを使用します。 プラグイン。
Project/plugins.sbt(またはグローバルplugins.sbt)に次を追加します。
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2")
その後、dependencyTree
コマンドなどにアクセスできます。
ライブラリの依存関係を表示する場合は、coursier
プラグインを使用できます: https://github.com/coursier /coursier/blob/master/doc/FORMER-README.md#printing-trees
出力例: テキスト(色なし): https://Gist.github.com/vn971/3086309e5b005576533583915d2fdec4
プラグインは、印刷ツリーとはまったく異なる性質を持っていることに注意してください。高速かつ同時の依存関係ダウンロード用に設計されています。しかし、それはすてきで、ほとんどすべてのプロジェクトに追加できるので、言及する価値があると思います。
上記の"net.virtual-void" % "sbt-dependency-graph"
プラグインを使用してみましたが、Mavenの出力として〜180行(プロジェクトの各依存関係ごとに1行)と比較して、9K行が出力(空の行と重複が多い)になりましたmvn dependency:tree
出力。そのため、私はsbtラッパーを作成しました task そのMavenゴールのために、いハックですが、動作します:
// You need Maven installed to run it.
lazy val mavenDependencyTree = taskKey[Unit]("Prints a Maven dependency tree")
mavenDependencyTree := {
val scalaReleaseSuffix = "_" + scalaVersion.value.split('.').take(2).mkString(".")
val pomXml =
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>1.0</version>
<dependencies>
{
libraryDependencies.value.map(moduleId => {
val suffix = moduleId.crossVersion match {
case binary: sbt.librarymanagement.Binary => scalaReleaseSuffix
case _ => ""
}
<dependency>
<groupId>{moduleId.organization}</groupId>
<artifactId>{moduleId.name + suffix}</artifactId>
<version>{moduleId.revision}</version>
</dependency>
})
}
</dependencies>
</project>
val printer = new scala.xml.PrettyPrinter(160, 2)
val pomString = printer.format(pomXml)
val pomPath = Java.nio.file.Files.createTempFile("", ".xml").toString
val pw = new Java.io.PrintWriter(new File(pomPath))
pw.write(pomString)
pw.close()
println(s"Formed pom file: $pomPath")
import sys.process._
s"mvn -f $pomPath dependency:tree".!
}