web-dev-qa-db-ja.com

sbtで依存関係ツリーを表示するには?

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がツリーを構築しないのはなぜですか?

74
Cherry

コマンドラインから実行する場合、sbtに送信される各引数はコマンドであると想定されるため、sbt inspect tree cleanwillは次のようになります。

  • inspectコマンドを実行し、
  • 次にtreeコマンドを実行し、
  • cleanコマンド

inspectには引数が必要なので、これは明らかに失敗します。これはあなたが望むことをします:

sbt "inspect tree clean"
79
gourlaysama

タスクの依存関係(inspect treeが表示するもの)ではなく、ライブラリの依存関係(Mavenの場合と同様)を実際に表示する場合は、 sbt-dependency-graphを使用します。 プラグイン。

Project/plugins.sbt(またはグローバルplugins.sbt)に次を追加します。

addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2")

その後、dependencyTreeコマンドなどにアクセスできます。

125
OrangeDog

ライブラリの依存関係を表示する場合は、coursierプラグインを使用できます: https://github.com/coursier /coursier/blob/master/doc/FORMER-README.md#printing-trees

出力例: image テキスト(色なし): https://Gist.github.com/vn971/3086309e5b005576533583915d2fdec4

プラグインは、印刷ツリーとはまったく異なる性質を持っていることに注意してください。高速かつ同時の依存関係ダウンロード用に設計されています。しかし、それはすてきで、ほとんどすべてのプロジェクトに追加できるので、言及する価値があると思います。

16
VasiliNovikov

上記の"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".!
}
3
MaxNevermind