4

我正在尝试将各种设置与我的 Play 中的构建定义分开!2.1 应用。

我在 build.sbt 中定义了一些设置如下:

name := "My Project"
version := 1.0

如何在 Build.scala 中重用这些值?

object ApplicationBuild extends Build {

  val main = 
    // Doesn't compile since name and version are SettingKeys, not Strings
    play.Project(name, version).settings(
      // ...
    )

}

非常感谢!

4

2 回答 2

6

如果您需要访问密钥,您可以使用<<=代替(例如代替)。在这种情况下,我们希望从全局范围中提取版本和名称。:=<+=+=

val main = play.Project(appName, appVersion, appDependencies).settings(
  version <<= (version in Global)  { v => v} ,
  name <<= (name in Global) { n => n } 
)

虽然由于这是默认范围,但在这种情况下我们可以省略范围。

val main = play.Project(appName, appVersion, appDependencies).settings(
  version <<= (version)  { v => v} ,
  name <<= (name) { n => n } 
)

一个更短的版本很简单

val main = play.Project(appName, appVersion, appDependencies).settings(
  version <<= version ,
  name <<= name
)

请注意,您的build.sbt文件必须放在根目录而不是project/目录中。

于 2012-12-11T09:22:19.847 回答
1

Build.scala 无法访问您在 build.sbt 中定义的值,但它可以反过来工作。无论您在这里尝试做什么,实际上都只是试图破解 SBT 0.12。

我建议您在 .scala 文件中定义共享设置,即。设置.scala。然后您可以从 Build.scala 和 build.sbt 中引用这些共享设置。

设置.scala

object Settings {
  appName:= "My Project"
  appVersion:= 1.0
}

构建.scala

object ApplicationBuild extends Build {
  val main = play.Project(appName, appVersion, appDependencies)...
}

构建.sbt

name := Settings.appName
version := Settings.appVersion

当然,如果您将 Play 2.2 与 SBT 0.13 一起使用,情况会有所不同。:)

让我知道这是否有意义并让您感觉更清洁。

于 2013-11-07T01:45:21.493 回答