packaging/testData/_structureDumper.sbt (26 lines of code) (raw):
lazy val dumpStructureToFile = inputKey[Unit]("")
dumpStructureToFile := {
println("Dumping structure...")
import org.jetbrains.sbtidea.SbtPluginLogger
import org.jetbrains.sbtidea.packaging.structure.sbtImpl.{SbtPackagedProjectNodeImpl, SbtPackagingStructureExtractor}
val rootProject = thisProjectRef.value
val data = dumpDependencyStructureOffline.?.all(ScopeFilter(inAnyProject)).value.flatten.filterNot(_ == null)
val buildDeps = buildDependencies.value
val buildStructure = Keys.buildStructure.value
val logger = new SbtPluginLogger(streams.value)
val structureExtractor = new SbtPackagingStructureExtractor(rootProject, data, buildDeps, buildStructure, logger)
val structure: Seq[SbtPackagedProjectNodeImpl] = structureExtractor.extract
val baseTargetDirArgOpt = complete.DefaultParsers.spaceDelimited("base target directory").parsed.headOption
val baseTargetDir = baseTargetDirArgOpt.map(new File(_)).getOrElse(new File("."))
val projectName = (thisProjectRef / name).value
val structureFile = new File(baseTargetDir, s"$projectName-structure.dat").getCanonicalFile
write(structure, structureFile)
println(s"Structure written to: $structureFile")
println(s"Package output directory: ${packageOutputDir.value}")
}
def write(value: Any, file: File): Unit = {
import java.io.{FileOutputStream, ObjectOutputStream}
val str = new ObjectOutputStream(new FileOutputStream(file))
str.writeObject(value)
str.close()
}