【问题标题】:trait Build in package sbt is deprecated: Use .sbt format insteadtrait Build in package sbt is deprecated: Use .sbt format instead
【发布时间】:2017-07-18 05:58:12
【问题描述】:

使用sbt 0.13.5,在IntelliJ中打开项目时,有警告信息

~\myproject\project\Build.scala:5: trait Build in package sbt is 已弃用:改用 .sbt 格式

Build.scala 的内容是

import sbt._
object MyBuild extends Build  {
  lazy val root = Project("MyProject", file("."))
    .configs(Configs.all: _*)
    .settings(Testing.settings ++ Docs.settings: _*)
}

Appendix: .scala build definitionsbt documentation 相当压倒性。

如何将我现有的 Build.scala 合并到 build.sbt?希望对文档/教程/示例有任何指导。

【问题讨论】:

  • 你只需要将 MyBuild 的内容移动到一个 sbt 文件中(build.sbt 是惯例)
  • 试过了,被语法弄糊涂了。我尝试转换的 Build.scala 没有 Key := Value 结构,如 sbt 文档中所示的示例所示。
  • 你应该使用 sbt 0.13.13。
  • @SethTisue 刚刚升级到 0.13.13。所有测试都通过了。现在只需要学习如何将上面提到的build.scala迁移到build.sbt中

标签: scala sbt


【解决方案1】:

Build.scala 重命名为build.sbt 并将其上移一级目录,使其位于顶部而不是project 目录内。

然后去掉开头和结尾,留下:

lazy val root = Project("MyProject", file("."))
  .configs(Configs.all: _*)
  .settings(Testing.settings ++ Docs.settings: _*)

这是基础。

那么如果你想添加更多的设置,例如:

lazy val root = Project("MyProject", file("."))
  .configs(Configs.all: _*)
  .settings(
    Testing.settings,
    Docs.settings,
    name := "MyApp",
    scalaVersion := "2.11.8"
  )

在 sbt 0.13.13 中,您不再需要设置序列上的 :_* 东西;旧版本需要它。

官方文档中的迁移指南在这里:http://www.scala-sbt.org/0.13/docs/Migrating-from-sbt-012x.html#Migrating+from+the+Build+trait

【讨论】:

  • 完美运行!实际上有一个 build.sbt,我只是删除了旧的项目/Build.scala,并将那段代码移到了 build.sbt 的顶部。在我们的 build.sbt 中仍然有很多 1 行设置(每行之间有一个空行)。我试图通过添加更多键来关注Build definitionname := "MyApp" , scalaVersion = "2.11.8".settings(...)。但得到错误 sbt.compiler.EvalException: Type error in expression。此处不允许使用 `: _*' 注释 您能提出解决方案吗?
  • 如果不再需要:_*,是否可以将.configs(Configs.all: _*) 更改为.configs(Configs.all)?我还应该将当前在 build.sbt 中的所有单行设置移动到 .settings(etc.) 中。示例:parallelExecution in Test := falsejavacOptions ++= Seq("-source", "1.8", "-target", "1.8")。更准确地说,定义设置的推荐位置是什么?当在.setting() 中和作为 build.sbt 中的单行时?
  • 顺便说一句,Project("MyProject" 中使用的名称和设置键name := "MyApp" 有什么区别?这些names 在哪里使用?在 SBT API 中,Project.id 表示 id = "My Project" 是“项目 ID 用于唯一标识构建中的项目”。但是没有关于Keys.name的描述
  • 这些问题很好,但我想我已经回答了你原来的问题——我建议你提出新问题。
猜你喜欢
  • 2015-01-17
  • 2015-06-20
  • 2016-03-13
  • 2016-02-28
  • 1970-01-01
  • 2022-12-04
  • 2022-12-27
  • 2015-10-17
  • 2018-03-15
相关资源
最近更新 更多