用例:我希望能夠顯示我的 sbt 專案的依賴關系樹,所以我添加addDependencyTreePlugin了我的~/.sbt/1.0/plugins.sbt, 以使其在我的機器上全域可用。
但是,該插件僅在 sbt 1.4.x 之后才可用(不確定確切的版本)。
問題:每當我嘗試構建一個在 中具有sbt.version=1.3.x或更低的專案時build.properties,它都會失敗。
有沒有辦法addDependencyTreePlugin根據構建程序正在使用的“當前”版本的 sbt 有條件地執行?
這不起作用:
addDependencyTreePlugin.filter(es => sbtVersion.value.startsWith("1.5")
sbt 會抱怨:
.../plugins.sbt:4: error: `value` can only be used within a task or setting macro, such as :=, =, =, Def.task, or Def.setting.
addDependencyTreePlugin.filter(es => sbtVersion.value.startsWith("1.5"))
^
uj5u.com熱心網友回復:
SBTaddDependencyTreePlugin定義如下:
def addDependencyTreePlugin: Setting[Seq[ModuleID]] =
libraryDependencies = sbtPluginExtra(
ModuleID("org.scala-sbt", "sbt-dependency-tree", sbtVersion.value),
sbtBinaryVersion.value,
scalaBinaryVersion.value
)
要應用條件邏輯,您必須使用以下內容:
def addDependencyTreePluginCustom: Setting[Seq[ModuleID]] =
libraryDependencies = if (condition) Seq(sbtPluginExtra(
ModuleID("org.scala-sbt", "sbt-dependency-tree", sbtVersion.value),
sbtBinaryVersion.value,
scalaBinaryVersion.value
)) else Seq()
注意:可能存在更簡單的方法
uj5u.com熱心網友回復:
在@Ga?l 的幫助下,我想出了:
libraryDependencies = (if (VersionNumber(sbtVersion.value).matchesSemVer(SemanticSelector(">=1.4"))) {
println(s"Adding dependency tree plugin, sbt version is ${sbtVersion.value}")
Seq(
sbtPluginExtra(
ModuleID("org.scala-sbt", "sbt-dependency-tree", sbtVersion.value),
sbtBinaryVersion.value,
scalaBinaryVersion.value
)
)
} else Seq[ModuleID]())
}
只要 sbt 版本是 1.2 或更高版本,它就可以作業(因為這是引入VersionNumber和SemanticSelector符合https://stackoverflow.com/a/56587048/2037054的版本
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412163.html
標籤:
