使用project转换.scala项目定义.配置为build.sbt



我正在尝试将构建定义从Scala转换为build.sbt

在Scala定义中,我有这样的东西:

  lazy val ComponentTest = config("componenttest") extend Test
  val componentTests = inConfig(ComponentTest)(Defaults.testTasks) ++ Seq(
    testOptions in ComponentTest := Seq(Tests.Filter(componentTestFilter))
  )
  val main = play.Project(appName, appVersion, appDependencies ++ testDependencies)
    .settings(...)
    .configs(ComponentTest)
    .settings(componentTests: _*)
  private def componentTestFilter(name: String): Boolean = name endsWith "CT"

我还没有发现如何将Project.configs(ComponentTest)迁移到build.sbt

我找到的唯一解决方案要复杂得多:

lazy val ComponentTest = config("componenttest") extend Test
inConfig(ComponentTest)(Defaults.testSettings)
javaSource in ComponentTest := (javaSource in Test).value
scalaSource in ComponentTest := (scalaSource in Test).value
configuration in ComponentTest := (configuration in Test).value
testOptions in ComponentTest := (testOptions in Test).value
testOptions in Test += Tests.Filter(unitFilter)
testOptions in ComponentTest := Seq(Tests.Filter(componentTestFilter))
def componentTestFilter(name: String): Boolean = name endsWith "CT"

重新定义所有设置(javaSource, scalaSource…)感觉不对。

有更好的吗?还是应该混合使用。scala和。sbt定义?还是坚持使用。scala?

您可以使用project宏来引用您的项目。

lazy val main = project.in(file(".")).configs(ComponentTest)
lazy val ComponentTest = config("componenttest") extend Test
inConfig(ComponentTest)(Defaults.testTasks) ++ Seq(
  testOptions in ComponentTest := Seq(Tests.Filter(componentTestFilter))
)
def componentTestFilter(name: String): Boolean = name endsWith "CT"

至于你的问题,如果你应该混合.scala.sbt。我认为在需要的时候这是一个有效的方法。build.sbt有它的局限性,例如,不同.sbt文件中的代码不共享,编写复杂的构建不方便(您必须记住在每个语句之后添加额外的行,并将所有表达式保持在一起)。

我想说你应该坚持适合你的。

相关内容

最新更新