这是前一个问题的延伸 trait Build in package sbt is deprecated: Use .sbt format instead
建议的清除build.sbt的指导原则是什么,以使其与最新的sbt 0.13.13(截至2017年3月)保持同步。例如:
lazy val root = Project(id = "MyProject", file("."))
.configs(Configs.all: _*)
.settings(
Testing.settings,
Docs.settings,
name := "MyApp",
scalaVersion := "2.11.8"
)
parallelExecution in Test := false
scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature", "-Xlint:-missing-interpolator", "-Xfatal-warnings", "-Xlint")
assemblySettings
test in assembly := {}
libraryDependencies ++= Seq(
"org.scalatest" %% "scalatest" % "3.0.1" % "test",
etc.
)
javacOptions ++= Seq("-source", "1.8", "-target", "1.8")
javaOptions in run ++= Seq(
"-Dcom.sun.management.jmxremote=true",
"-Dcom.sun.management.jmxremote.port=4444",
"-Dcom.sun.management.jmxremote.authenticate=false",
"-Dcom.sun.management.jmxremote.ssl=false"
)
// settings values for addSbtPlugin("org.flywaydb" % "flyway-sbt" % "4.0.1")
flywayUrl := "jdbc:postgresql://localhost:5432/mydbname"
flywayUser := "someone"
flywayPassword := "****"
Q1。
.configs(Configs.all: _*)
应该更改为.configs(Configs.all)
吗?
Q2。 .settings(...)
内有哪些项目值得放置。相反,何时应将某些东西放在build.sbt的主体中?
Q3。 Project(id = "MyProject", ..)
中使用的名称与设置键name := "MyApp"
的区别是什么?这些名字在哪里使用?在SBT API中,Project.id表示id =“My Project”是“项目ID用于唯一标识构建中的项目”。但是,没有与Keys.name
Q4。从上面的示例中应该简化/更改的任何内容?例如,可以将各种插件的设置放在那里吗?
答案 0 :(得分:1)
嗯,不是一个明确的指导方针(我怀疑有人可以指出这样的事情),但有些答案。
(旧)configs
的签名是:
def configs(cs: Configuration*): Project
这意味着它接受varargs作为参数 - Configs.all: _*
是将Seq
作为varargs参数序列传递的有效方法。如果您使用的是SBT.0.13.13,您可以根据需要进行更改,在旧版本中它会中断。
如果您使用的是root项目:
lazy val root = Project(id = "MyProject", file("."))
您放入root.settings()
的设置几乎与您直接放入build.sbt
的设置相同。当您有多个模块/子项目时,前者实际上更有用:
lazy val root = Project(id = "MyProject", file("."))
.aggregate(a, b)
lazy val a = Project(id = "A", file("modules/a"))
.settings()
lazy val b = Project(id = "B", file("modules/b"))
.settings()
就我个人而言,我会使用.settings
- 仅针对多模块项目中的所有内容(为了保持一致性),而是直接在单个模块项目中的build.sbt
中。
当您构建(Maven,Ivy)工件时,您会为3个名称生成名称,从而创建名称空间:组织,名称和版本。除非你改变它,否则从id复制名称。当您运行sbt(you are in project root
)时,Id本身就决定了您的项目名称,这在您拥有多个模块时会产生更多不同。使用:
lazy val root = (project in file("."))
将使用将采用变量名称的宏并将其用作项目的id - 所以等于:
lazy val root = Project(id = "root", file("."))
settings
的值可以移到外面:
Testing.settings
Docs.settings
name := "MyApp"
scalaVersion := "2.11.8"
除非您使用某些非标准配置,否则您应该在没有.configs()
的情况下离开。在Configs.all
中直接使用build.sbt
很难,但如果不需要,那么你可以放弃
lazy val root = Project(id = "MyProject", file("."))
因为应用于build.sbt
的所有设置都应用于同一目录(.
)中的项目。
据我所知,如果它不被弃用,那就是品味问题。尝试简单地应用一些常识和良好实践 - 毕竟它只是一个代码。