sbtで依存関係ツリーを表示するにはどうすればよいですか?


91

ドキュメントに記載されているように、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がツリーを構築しないのはなぜですか?


@TheKojuEffectからのsbt> 1.4の最新の回答を見てください
UselesssCat

回答:


85

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

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

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

sbt "inspect tree clean"

22
ライブラリの依存関係は何を示していますか?そうは思わないでください。
prayagupd 2016年

2
それは私のために働いて、まず、私はSBTコンソールに移動し、実行している検査ツリーきれいなコマンドを。依存関係の大きなツリーができました。
日曜日

2
私はこれを試しました、それは物事のビットツリーを与えます。しかし、私は外部ライブラリを細かくしませんでした。つまり、出力でAkkaを検索しましたが、コンソールにAkkaの出現は表示されませんでした。それはいくつかの役に立たない木を示しています。それは私のローカルおよび依存モジュールと詳細についてのすべてを持っています。このコマンドは役に立たない。このナンセンス以外のコマンドを助けてください。
日曜日

2
@Sun:maven / ivyライブラリの依存関係を取得する方法については、2番目の回答を参照してください。これはあなたが探しているものです。このinspect tree <foo>コマンドは<foo>、sbtのタスクおよび設定システムでタスクの依存関係を検査することを目的としています。これは便利な場合もありますが、完全に異なります。
gourlaysama 2017年

4
木のようなものを印刷します。受け入れられる答えであってはなりません
yerlilbilgin 2018

155

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

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

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

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


19
ライブラリの依存関係情報については、Ivyによって生成された詳細な依存関係レポートもあります。を実行した後sbt updatetarget/resolution-cache/reports/MSIEなどのブラウザでXMLレポートを開きます。
リッチ

14
ライブラリを導入せずに方法はありませんか?私はメイヴンを逃し始めます:(
Jas

5
@Jas Mavenでさえプラグインを介してこれを実現します
。dependency

削除された依存関係と空の行は、Mavenのクリーンな出力と比較してゴミのように見えます。
maxNevermind 2018年

3
sbt 1.0以降の場合は、代わりにこのバージョンが必要です。 addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")または、最新バージョンと手順についてgithub.com/jrudolph/sbt-dependency-graphを参照してください。
シルバービーク

21

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

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

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


@mjjaniecありがとう!とりあえず使います。それが変わる時までに、うまくいけば、ウェブサイトはこれのための適切な/安定したエントリーを持っているでしょう。
VasiliNovikov 2018年

5

"net.virtual-void" % "sbt-dependency-graph"上記のプラグインを使用してみたところ、Mavenのmvn dependency:tree出力の出力として約180行(プロジェクトの依存関係ごとに正確に1行)であるのに対し、出力として9K行(空の行と重複が多数あります)が得られました。だから私はそのMavenゴールのためのsbtラッパータスク、醜いハックを書いたが、それは機能する:

// 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".!
}

あなたのコードは、Windows上でこれを実行しようとしている誰もが、その後の絶対パスを書くことを忘れないでくださいところであれば、本当に便利であるmvn.cmdだけ書くのではなくmvn
nomadSK25

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.