Как мне получить полное «рекурсивное» дерево / график зависимостей задач в SBT?

#scala #sbt

#scala #sbt

Вопрос:

Когда я, например, inspect tree compile в простом проекте sbt:

 sbt> inspect tree compile
[info] compile:compile = Task[sbt.inc.Analysis]
[info]    -compile:compile::compileInputs = Task[sbt.Compiler$Inputs]
[info]   |  -*/*:compileOrder = Mixed
[info]   |  -compile:dependencyClasspath = Task[scala.collection.Seq[sbt.Attributed[java.io.File]]]
[info]   |  -*/*:maxErrors = 100
[info]   |  -compile:sources = Task[scala.collection.Seq[java.io.File]]
[info]   |  -compile:scalacOptions = Task[scala.collection.Seq[java.lang.String]]
[info]   |  -*/*:javacOptions = Task[scala.collection.Seq[java.lang.String]]
[info]   |  -*:compilers = Task[sbt.Compiler$Compilers]
[info]   |  -compile:incCompileSetup = Task[sbt.Compiler$IncSetup]
[info]   |  -compile:compile::streams = Task[sbt.std.TaskStreams[sbt.Init$ScopedKey[_ <: Any]]]
[info]   | |  -*/*:streamsManager = Task[sbt.std.Streams[sbt.Init$ScopedKey[_ <: Any]]]
[info]   | | 
[info]   |  -*/*:sourcePositionMappers = Task[scala.collection.Seq[scala.Function1[xsbti.Position, scala.Option[xsbti.Position..
[info]   |  -compile:classDirectory = target/scala-2.10/classes
[info]   | 
[info]    -compile:compile::streams = Task[sbt.std.TaskStreams[sbt.Init$ScopedKey[_ <: Any]]]
[info]      -*/*:streamsManager = Task[sbt.std.Streams[sbt.Init$ScopedKey[_ <: Any]]]
  

«Глубина» этого дерева ограничена: например, в нем упоминается compile:sources , которое само по себе имеет ряд зависимостей:

 sbt> inspect tree compile:sources
[info] compile:sources = Task[scala.collection.Seq[java.io.File]]
[info]    -compile:unmanagedSources = Task[scala.collection.Seq[ja..
[info]   |  -*/*:excludeFilter = sbt.SimpleFileFilter@745ef9f2
[info]   |  -*:baseDirectory = /tmp/xxxx
[info]   |  -*/*:unmanagedSources::includeFilter = sbt.SimpleFilte..
[info]   |  -*/*:sourcesInBase = true
[info]   |  -compile:unmanagedSourceDirectories = List(/tmp/xxxx/s..
[info]   |    -compile:javaSource = src/main/java
[info]   |   |  -compile:sourceDirectory = src/main
[info]   |   |    -*:sourceDirectory = src
[info]   |   |   |  -*:baseDirectory = /tmp/xxxx
[info]   |   |   |    -*:thisProject = Project(id: xxxx, base: /tm..
[info]   |   |   |   
[info]   |   |    -compile:configuration = compile
[info]   |   |   
[info]   |    -compile:scalaSource = src/main/scala
[info]   |      -compile:sourceDirectory = src/main
[info]   |        -*:sourceDirectory = src
[info]   |       |  -*:baseDirectory = /tmp/xxxx
[info]   |       |    -*:thisProject = Project(id: xxxx, base: /tm..
[info]   |       |   
[info]   |        -compile:configuration = compile
[info]   |       
[info]    -compile:managedSources = Task[scala.collection.Seq[java..
[info]      -compile:sourceGenerators = List()
  

Я хотел бы каким-то образом иметь возможность анализировать «полную картину» — например, у меня есть проект, для assembly которого задача, похоже, запускает некоторые задачи дважды. Прямо сейчас довольно сложно понять, что происходит.

Комментарии:

1. Можете ли вы открыть запрос функции для этого? Я полагаю, что как только работа sbt-сервера начнет затрагивать пользовательские интерфейсы, мы увидим что-то в этом пространстве, но было бы неплохо отследить это.