簡體   English   中英

如何在 build.sbt 中定義自己的設置或變量?

[英]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不應該再抱怨了。

此處查看GlobalThisBuild之間的區別。

這是一個兩步過程:首先定義鍵,然后為它分配一個值。

  1. 創建一個新設置:
// String is the type, the parameter is a useful description.
val scalaVersion = settingKey[String]("The version of Scala used for building.")
  1. 給一個設置一個值:
scalaVersion := "type suitable for key"

然后您可以使用scalaVersion.value在其他地方引用您的設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM