玩!框架 - 使用Build.scala构建build.sbt

时间:2012-12-11 06:06:52

标签: scala playframework sbt

我正在尝试将各种设置与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(
      // ...
    )

}

非常感谢!

2 个答案:

答案 0 :(得分: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/目录。

答案 1 :(得分:1)

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

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

<强> Settings.scala

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

<强> Build.scala

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

<强> build.sbt

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

当然,如果你使用Play 2.2和SBT 0.13,故事会有所不同。 :)

请告诉我这是否有意义,并为您感觉更清洁。