Bağımlılık ağacını sbt'de nasıl görebilirim?


91

SBT bağımlılık ağacını belgelerde açıklandığı gibi incelemeye çalışıyorum :

sbt inspect tree clean

Ama şu hatayı alıyorum:

[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]        ^

Yanlış olan ne? SBT neden ağacı inşa etmiyor?


Sbt > 1.4 için @TheKojuEffect'in en son cevabına bakın
UselesssCat

Yanıtlar:


85

Komut satırından çalıştırıldığında, sbt'ye gönderilen her argümanın bir komut olması beklenir, yani sbt inspect tree clean:

  • inspectkomutu çalıştırın ,
  • sonra treekomutu çalıştırın ,
  • sonra cleankomut

inspectTartışmaya ihtiyaç duyduğu için bu açıkça başarısız olur . Bu, istediğinizi yapacak:

sbt "inspect tree clean"

22
Kitaplık bağımlılıklarını gösterir? Sanmıyorum.
duaagupd

2
Benim için çalışıyor, Öncelikle sbt konsoluna geçtim ve ağaç temizleme denetimini çalıştır komutunu çalıştırdım . Büyük bir bağımlılık ağacım var.
Pazar

2
Bunu denedim, bir şeyler ağacı veriyor. Ancak herhangi bir harici kütüphaneyi cezalandırmadım. yani çıkışta Akka'yı aradım, konsolda herhangi bir Akka oluşumu göstermedim. İşe yaramaz bir ağaç gösteriyor. Sadece yerel ve bağımlı modüllerime ve detaylara sahip. Bu komut işe yaramaz. Lütfen bana bu saçmalıktan başka herhangi bir komuta yardım edin.
Paz

2
@Sun: maven / ivy kitaplık bağımlılıklarını nasıl edineceğinize dair ikinci cevaba bakın, aradığınız şey bu. inspect tree <foo>Komut görevin bağımlılıkları teftiş hakkındadır <foo>bazen yararlı ama tamamen farklı SBT görevi & ayar sisteminde.
gourlaysama

4
Ağaç gibi bir şey yazdırıyor. kabul edilen cevap olmamalı
yerlilbilgin

155

Görev bağımlılıkları ( inspect treegörüntülenen) yerine kitaplık bağımlılıklarını (Maven ile yapacağınız gibi) gerçekten görüntülemek istiyorsanız, sbt-bağımlılık grafiği eklentisini kullanmak isteyeceksiniz .

Aşağıdakileri project / plugins.sbt (veya global plugins.sbt) 'ye ekleyin.

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

Sonra dependencyTreekomuta ve diğerlerine erişiminiz var .


19
Kitaplık bağımlılık bilgisi için, Ivy tarafından oluşturulan ayrıntılı bağımlılık raporları da vardır. Yaptıktan sonra sbt updateXML raporlarını target/resolution-cache/reports/MSIE gibi bir tarayıcıda açın.
Zengin

15
bir kütüphane tanıtmadan olmaz mı? maven'i özlemeye başladım :(
Jas

5
@Jas Even Maven bunu bir eklenti aracılığıyla gerçekleştirir, sadece maven, bağımlılığı çalıştırdığınızda eklentiyi (org.apache.maven.plugins: maven-bağımlılık-eklentisi) otomatik olarak alır: tree
JMess

Çıkarılan bağımlılıklar ve boş satırlar, maven'in temiz çıktısına kıyasla çöp gibi görünmesini sağlar.
MaxNevermind

3
Sbt 1.0 ve üstü için, bunun yerine bu sürüme ihtiyacınız addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")var : Veya en son sürüm ve talimatlar için github.com/jrudolph/sbt-dependency-graph'a bir göz atın .
silverbeak

21

Kitaplık bağımlılıklarını görüntülemek istiyorsanız, coursiereklentiyi kullanabilirsiniz : https://github.com/coursier/coursier/blob/master/doc/FORMER-README.md#printing-trees

Çıktı örneği: görüntü metin (renksiz): https://gist.github.com/vn971/3086309e5b005576533583915d2fdec4

Eklentinin ağaç yazdırmaktan tamamen farklı bir yapıya sahip olduğunu unutmayın. Hızlı ve eşzamanlı bağımlılık indirmeleri için tasarlanmıştır. Ama güzel ve hemen hemen her projeye eklenebilir, bu yüzden bahsetmeye değer olduğunu düşünüyorum.


@mjjaniec teşekkürler! Şimdilik kullanacağım. Değiştiğinde, umarım web sitesi bunun için uygun / stabilize edilmiş bir girişe sahip olur.
VasiliNovikov

5

"net.virtual-void" % "sbt-dependency-graph"Yukarıda bahsedilen eklentiyi kullanmayı denedim ve Maven'in çıktısındaki çıktı olarak ~ 180 satıra (projemdeki her bağımlılık için tam olarak bir satır) kıyasla çıktı olarak 9K satır (birçok boş satır ve yineleme var) aldım mvn dependency:tree. Bu yüzden bu Maven hedefi için bir sbt sarmalayıcı görevi yazdım , çirkin bir hack ama işe yarıyor:

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

Kodunuz gerçekten yararlı, BTW eğer bunu pencerelerde çalıştırmaya çalışan biri varsa, lütfen mvn.cmdsadece yazmak yerine mutlak yolu yazmayı unutmayınmvn
nomadSK25

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.