एसबीटी में निर्भरता का पेड़ कैसे देखें?


91

मैं एसबीटी निर्भरता वृक्ष का निरीक्षण करने की कोशिश कर रहा हूं जैसा कि प्रलेखन में वर्णित है :

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
यह पुस्तकालय निर्भरता क्या दर्शाता है ?? ऐसा नहीं लगता।
प्रयागपाद

2
यह मेरे लिए काम कर रहा है, सबसे पहले, मैं sbt कंसोल और निरीक्षण ट्री क्लीन कमांड चलाने के लिए चला गया । मुझे आश्रितों का बड़ा पेड़ मिला।
सूर्य

2
मैंने यह कोशिश की, यह चीजों का सा पेड़ देता है। लेकिन मैंने किसी बाहरी लाइब्रेरी को ठीक नहीं किया। यानी मैं आउटपुट में अक्का की खोज करता हूं, मैंने कंसोल में अक्का की कोई घटना नहीं दिखाई। यह कुछ बेकार पेड़ दिखा रहा है। यह सब मेरे स्थानीय और आश्रित मॉड्यूल और विवरण के बारे में है। यह आदेश बेकार है। कृपया मुझे इस बकवास से किसी भी आदेश में मदद करें।
सूर्य

2
@ सुन: मावेन / आइवी लाइब्रेरी निर्भरता कैसे प्राप्त करें, इसके लिए दूसरा उत्तर देखें , जो आप देख रहे हैं। inspect tree <foo>आदेश कार्य की निर्भरता निरीक्षण के बारे में है <foo>एसबीटी का काम और सेटिंग प्रणाली, जो कभी कभी उपयोगी है, लेकिन पूरी तरह से अलग है में।
गौरल्यासेम

4
यह एक पेड़ की तरह कुछ प्रिंट करता है। स्वीकृत उत्तर नहीं होना चाहिए
yerlilbilgin

155

यदि आप वास्तव में कार्य निर्भरता (जो inspect treeप्रदर्शित करता है) के बजाय पुस्तकालय निर्भरता (जैसा कि आप मावेन के साथ होगा) देखना चाहते हैं, तो आप sbt-dependency-graph प्लगइन का उपयोग करना चाहेंगे

अपने प्रोजेक्ट / plugins.sbt (या वैश्विक plugins.sbt) के साथ निम्नलिखित जोड़ें।

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

फिर आपके पास dependencyTreeकमांड, और अन्य तक पहुंच है ।


19
पुस्तकालय निर्भरता जानकारी के लिए, आइवी द्वारा उत्पन्न विस्तृत निर्भरता रिपोर्ट भी हैं। करने के बाद sbt update, target/resolution-cache/reports/MSIE जैसे ब्राउज़र में XML रिपोर्ट खोलें ।
रिच

14
पुस्तकालय शुरू किए बिना कोई रास्ता नहीं? मुझे मिसवेन की शुरुआत करनी है :(
जेस

5
@ जस मावेन भी एक प्लगइन के माध्यम से इसे पूरा करता है, इसका सिर्फ यही मावेन प्लगइन पकड़ता है (org.apache.maven.plugins: maven-dependency-plugin) स्वचालित रूप से जब आप निर्भरता चलाते हैं: पेड़
Jessess

मावेन के स्वच्छ उत्पादन की तुलना में अनुमानित निर्भरताएं और खाली लाइनें इसे कचरे की तरह दिखती हैं।
मैक्सएनविंडम

3
1.0 sbt और ऊपर के लिए, आपको इसके बजाय इस संस्करण की आवश्यकता है: addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")या नवीनतम संस्करण और निर्देशों के लिए github.com/jrudolph/sbt-d dependency-graph पर एक नज़र डालें ।
सिल्वरबेक

21

यदि आप लाइब्रेरी निर्भरताएँ देखना चाहते हैं , तो आप coursierप्लगइन का उपयोग कर सकते हैं : https://github.com/coursier/coursier/blob/master/doc/FORMER-README.md#printing-trees

आउटपुट उदाहरण: छवि पाठ (रंगों के बिना): https://gist.github.com/vn971/3086309e5b005576533583915d2fdec4

ध्यान दें कि प्लग में पेड़ों की छपाई की तुलना में पूरी तरह से अलग प्रकृति है। यह तेज और समवर्ती निर्भरता डाउनलोड के लिए डिज़ाइन किया गया है। लेकिन यह अच्छा है और इसे लगभग किसी भी परियोजना में जोड़ा जा सकता है, इसलिए मुझे लगता है कि यह ध्यान देने योग्य है।


@mjjaniec धन्यवाद! मैं अभी के लिए इसका इस्तेमाल करेंगे। जब तक यह बदल जाएगा, उम्मीद है कि वेब साइट के लिए इसके लिए एक उचित / स्थिर प्रविष्टि होगी।
वासिलीनोविक

5

मैंने "net.virtual-void" % "sbt-dependency-graph"ऊपर उल्लिखित प्लगइन का उपयोग करने का प्रयास किया और मावेन के mvn dependency:treeआउटपुट में आउटपुट के रूप में ~ 180 लाइनों (मेरी परियोजना में प्रत्येक निर्भरता के लिए बिल्कुल एक पंक्ति) की तुलना में आउटपुट के रूप में 9K लाइनें मिलीं (कई खाली लाइनें और डुप्लिकेट हैं) । इसलिए मैंने उस मावेन गोल, एक बदसूरत हैक के लिए एक 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".!
}

आपका कोड वास्तव में उपयोगी है, BTW अगर कोई भी इसे खिड़कियों पर चलाने की कोशिश कर रहा है तो कृपया mvn.cmdकेवल लिखने के बजाय पूर्ण पथ लिखना न भूलेंmvn
nomadSK25

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.