scala - 如何将通用测试配置应用于所有项目?
问题描述
我正在将一个旧项目迁移到 Scala 3。build.sbt
如下:
import Dependencies._
inThisBuild(
Seq(
scalaVersion := "2.12.7",
scalacOptions ++= Seq(
"-unchecked",
// more
)
)
++ inConfig(Test)(Seq(
testOptions += Tests.Argument(TestFrameworks.ScalaTest, "-o", "-e"),
// more
))
)
lazy val root = (project in file("."))
.aggregate(
`test-util`
)
lazy val `test-util` = project
现在,我想将里面inThisBuild
的东西分开以便于阅读。
import Dependencies._
ThisBuild / scalaVersion := "3.0.1"
ThisBuild / scalacOptions ++= Seq(
"-unchecked",
// more
)
lazy val testSettings = inConfig(Test)(
Seq(
testOptions += Tests.Argument(TestFrameworks.ScalaTest, "-o", "-e"),
// more
))
lazy val root = (project in file("."))
.aggregate(
`test-util`
)
.settings(testSettings)
lazy val `test-util` = project
如您所见,我必须testSettings
为每个项目应用 。理想情况下,我想做类似的事情,ThisBuild / Test := testSettings
但这不是有效的语法。
有没有办法将 应用于testSettings
所有项目而无需明确设置.settings(testSettings)
?
编辑:
testSettings
我知道我可以用前缀写每一行ThisBuild / Test
,但我宁愿不重复相同的前缀。我正在寻找类似我所做的事情scalacOptions
。
解决方案
有没有办法将 testSettings 应用于所有项目而无需显式设置
.settings(testSettings)
考虑创建一个自动插件,它可以在所有子项目中自动注入设置,例如project/CommonTestSettings.scala
import sbt._
import Keys._
object CommonTestSettings extends sbt.AutoPlugin {
override def requires = plugins.JvmPlugin
override def trigger = allRequirements
override lazy val projectSettings =
inConfig(Test)(
Seq(
testOptions += Tests.Argument(TestFrameworks.ScalaTest, "-o", "-e")
// more
)
)
}
您可以测试show testOptions
哪个应该显示所有子项目中的通用设置,例如在我的项目中root
聚合foo
和bar
我得到类似
sbt:sbt-multi-project> show testOptions
[info] foo / Test / testOptions
[info] List(Argument(Some(TestFramework(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework)),List(-o, -e)))
[info] bar / Test / testOptions
[info] List(Argument(Some(TestFramework(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework)),List(-o, -e)))
[info] Test / testOptions
[info] List(Argument(Some(TestFramework(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework)),List(-o, -e)))
推荐阅读
- firebase - 在 Cloud Run 上运行 firebase cli
- java - 从字符串中添加单个数字
- flutter - 从变量初始化飞镖类
- node.js - 如何使用 Playwright 或 Puppeteer 登录 google 帐户?
- python - 为什么 numpy.exp() 在这种情况下会给出溢出警告?
- mysql - 使用 Ruby on rails Elastic Beanstalk 将 RDS 迁移到 Aurora MySQL
- spring - 在春季安全中实现每组授权的最佳方法
- dart - 在 Dart 中四舍五入到 10 分
- python - 循环创建类
- php - 多次匹配正则表达式模式