1
我寫了SBT任務,它可以輸出的依賴關係的信息,按項目進行分組(比如一個SBT項目具有多項目)如何在SBT任務中獲取SBT項目中所有子項目的依賴關係?
我知道有一個sbt-dependency-graph插件,但我可以直接使用它,因爲我想要生成一個json文件,但該插件只是輸出依賴關係樹到控制檯,而不返回數據對象,我不能輕鬆獲取我想要的數據。
我發現update
任務返回一個UpdateReport
其中包含我想要的很多信息,但它只屬於當前項目。在命令行中,如果我想知道所有項目的信息,我可以通過projects
命令手動顯示所有項目,並通過someproject/update
逐一查看它們。
但是如何在SBT任務中做同樣的事情?我想:
val reports = projects.toList.map(prj => (update in prj).value)
據報道:
[error] /Users/me/workspace/sbt-test/project/Build.scala:51: Illegal dynamic reference: prj
[error] val reports = projects.toList.map(prj => (update in prj).value)
[error] ^
[error] one error found
如何解決呢?
更多代碼:
import sbt._
import sbt.Keys._
object DemoBuild extends Build {
lazy val allUpdate = taskKey[Unit]("show update reports of all projects")
lazy val core = project
lazy val web = project
lazy val allUpdateDef = allUpdate := {
val reports = projects.toList.map(prj => (update in prj).value)
println(reports)
}
lazy val root = (project in file("."))
.settings(
allUpdateDef
)
}
你能分享更多的代碼嗎? –
@DaleWijnand問題更新 – Freewind
'.value'是編譯時宏 - 因此您應該直接引用所有項目(在編譯時應該知道'prj'),就像'(update in prj1).value ++(update在prj2).value ++ ...'而不是'prj'。不過,可能有更好的選擇,所以我的回答並不完整 – dk14