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가 트리를 구축하지 않는 이유는 무엇입니까?


1
@TheKojuEffect 의 sbt> 1.4
— UselesssCat

답변:


86

명령 줄에서 실행할 때 sbt로 전송 된 각 인수는 명령으로 간주되므로 sbt inspect tree clean다음 과 같이 됩니다.

  • inspect명령을 실행하십시오 .
  • 그런 다음 tree명령 을 실행하십시오 .
  • 다음 clean명령

inspect인수가 필요하기 때문에 이것은 분명히 실패합니다 . 이것은 당신이 원하는 것을 할 것입니다 :

sbt "inspect tree clean"

22
라이브러리 종속성을 보여주는 것은 무엇입니까 ?? 그렇게 생각하지 마십시오.
— prayagupd

2
그것은 나를 위해 일하고 있습니다. 먼저 sbt 콘솔로 이동하여 inspect tree clean 명령을 실행했습니다. 큰 의존성 트리가 있습니다.
— 일요일

2
나는 이것을 시도했다, 그것은 사물의 비트 트리를 제공합니다. 그러나 나는 외부 라이브러리를 제대로 처리하지 못했습니다. 즉, 출력에서 ​​Akka를 검색했는데 콘솔에 Akka가 표시되지 않았습니다. 쓸모없는 나무를 보여줍니다. 내 로컬 및 종속 모듈에 대한 모든 정보와 세부 정보 만 있습니다. 이 명령은 쓸모가 없습니다. 이 말도 안되는 것보다 명령을 도와주세요.
— Sun

2
@Sun : maven / ivy 라이브러리 종속성 을 얻는 방법에 대한 두 번째 답변을 참조하십시오 . 이 inspect tree <foo>명령은 <foo>sbt의 작업 및 설정 시스템에서 작업 의 종속성을 검사하는 데 관한 것으로, 때로는 유용하지만 완전히 다릅니다.
— gourlaysama

4
그것은 나무와 같은 것을 인쇄합니다. 허용 대답 안
— yerlilbilgin

155

작업 종속성 ( inspect tree표시 되는 내용)이 아닌 라이브러리 종속성 (Maven에서와 같이)을 실제로보고 싶다면 sbt-dependency-graph 플러그인 을 사용하고 싶을 것 입니다.

프로젝트 /plugins.sbt (또는 글로벌 plugins.sbt)에 다음을 추가하십시오.

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

그런 다음 dependencyTree명령 및 기타에 액세스 할 수 있습니다.


19
라이브러리 종속성 정보의 경우 Ivy에서 생성 한 자세한 종속성 보고서도 있습니다. 을 수행 한 후 MSIE와 같은 브라우저에서 sbt updateXML 보고서를 엽니 다 target/resolution-cache/reports/.
— Rich

15
도서관을 소개하지 않고는 방법이 없습니까? 나는 maven을 그리워 시작 :(
— Jas

5
@Jas Even Maven은 플러그인을 통해이 작업을 수행합니다. 해당 maven은 dependency : tree를 실행할 때 자동으로 플러그인 (org.apache.maven.plugins : maven-dependency-plugin)을
— 가져옵니다

제거 된 종속성과 빈 줄은 maven의 깨끗한 출력에 비해 쓰레기처럼 보입니다.
— MaxNevermind

3
sbt 1.0 이상에서는이 버전이 필요합니다. addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")또는 github.com/jrudolph/sbt-dependency-graph 에서 최신 버전 및 지침을 확인하세요.
— silverbeak

21

라이브러리 종속성 을 보려면 https://github.com/coursier/coursier/blob/master/doc/FORMER-README.md#printing-treescoursier 플러그인을 사용할 수 있습니다 .

출력 예 : 영상 텍스트 (색상 없음) : https://gist.github.com/vn971/3086309e5b005576533583915d2fdec4

플러그인은 인쇄 트리와 완전히 다른 특성을 가지고 있습니다. 빠르고 동시 종속성 다운로드를 위해 설계되었습니다. 그러나 그것은 훌륭하고 거의 모든 프로젝트에 추가 할 수 있으므로 언급 할 가치가 있다고 생각합니다.


@mjjaniec 감사합니다! 지금은 사용하겠습니다. 변경 될 때 쯤이면 웹 사이트에 이에 대한 적절하고 안정적인 항목이 있기를 바랍니다.
— VasiliNovikov 2018


5

"net.virtual-void" % "sbt-dependency-graph"위에서 언급 한 플러그인을 사용해 보았고 Maven mvn dependency:tree출력 의 출력 으로 ~ 180 줄 (내 프로젝트의 각 종속성에 대해 정확히 한 줄)과 비교하여 출력으로 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".!
}

여러분의 코드는 정말 도움이됩니다. BTW 누군가가 Windows에서 이것을 실행하려는 경우 작성하는 mvn.cmd대신 절대 경로를 작성하는 것을 잊지 마십시오mvn
— nomadSK25
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.