【问题标题】:Play! Framework - build.sbt with Build.scala玩!框架 - build.sbt 和 Build.scala
【发布时间】:2012-12-11 06:06:51
【问题描述】:

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

}

非常感谢!

【问题讨论】:

    标签: scala playframework sbt


    【解决方案1】:

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

    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/ 目录中。

    【讨论】:

    • 感谢您的回答!但是,这意味着我仍然必须定义 appName 和 appVersion(以便我可以调用 play.Project(...))。我不能简单地使用我在 build.sbt 中定义的值吗?另外,如果 appName 和 name 被定义为不同的值,哪个优先?
    • 最后应用的设置对项目具有优先权。问题出在github.com/playframework/Play20/blob/master/framework/src/… - 它设置了版本,这意味着您必须在该代码中完成之后再次设置它。在这种情况下,appName 和 appVersion 可能只是“blah”并且会被覆盖。
    • 好的,谢谢!我接受了你的回答。在我看来,这些参数仍然是不必要且令人困惑的。使用 play.Project() 就可以了(即没有参数)。
    • @IvanMeredith 您是否有机会将您的答案翻译成 Java?
    • @EricWilson 我不明白这怎么可能是java。 Play2.x 使用由 scala 构建的 sbt。
    【解决方案2】:

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

    我建议您在 .scala 文件中定义共享设置,即。设置.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,情况会有所不同。 :)

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

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 2018-06-22
      相关资源
      最近更新 更多