[英]How can I define my own setting or variable in build.sbt?
我嘗試定義自己的設置,該設置通過使用 build.sbt 中的名稱設置值計算得出
// ...
val projectName_ = "project_name"
val projectName = projectName_.replace("_", "")
lazy val main_class = settingKey[String]("")
main_class := s"ru.company.${projectName}.${name.value}.Main"
lazy val commonSettings = Seq(
// ...
Compile / mainClass := Some(main_class.value),
assembly / mainClass := Some(main_class.value)
// ...
)
lazy val rollout = taskKey[File](s"rollout_${projectName_}") := {
// Other using of main_class.value
}
lazy val root = (project in file("."))
.aggregate(stg, dm)
.settings(
name := "root"
)
lazy val core = project
.settings(
name := "core",
//...
)
lazy val stg = project.dependsOn(core)
.settings(
name := "stg",
commonSettings,
rollout
)
lazy val dm = project.dependsOn(core)
.settings(
name := "dm",
commonSettings,
rollout
)
但是當我嘗試獲取我的設置值時出現錯誤:
Some(main_class.value)
引用未定義的設置
如何定義可以在設置中使用的名稱設置的變量?
當你這樣做
lazy val main_class = settingKey[String]("")
main_class := s"ru.company.${projectName}.${name.value}.Main"
您正在為任何可以訪問它的地方定義settingKey
,但僅為當前項目(即root
)設置其值。 對於子項目,該值未定義。 所以你必須為所有項目設置它。
做這樣的事情:
Global / main_class := s"ru.company.${projectName}.${name.value}.Main"
或者
ThisBuild / main_class := s"ru.company.${projectName}.${name.value}.Main"
並且main_class.value
不應該再抱怨了。
在此處查看Global
和ThisBuild
之間的區別。
這是一個兩步過程:首先定義鍵,然后為它分配一個值。
// String is the type, the parameter is a useful description.
val scalaVersion = settingKey[String]("The version of Scala used for building.")
scalaVersion := "type suitable for key"
然后您可以使用scalaVersion.value
在其他地方引用您的設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.