[英]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.