scala - 基于预定义配置参数的组合编写简洁的 sbt 配置
问题描述
我正在尝试尽可能多地从我的字符串中删除不必要的build.sbt
字符串
sbt 提供了使用 Provide、Test 等作为配置参数的方法,如下所示:
"org.apache.spark" %% "spark-core" % "3.0.0" % Provided,
或者
"org.mockito" %% "mockito-scala" % "1.16.3" % Test,
但是如何重写更复杂的配置,例如:
"org.scalatest" %% "scalatest" % "3.2.3" % "test,it",
或者
.dependsOn(util % "compile->compile;test->test")
解决方案
sbt 是(混蛋的)Scala 代码,所以你总是可以编写一些函数或扩展方法,例如:
def configs(head: Configuration, tail: Configuration*) =
(head :: tail.toList).mkString(",")
implicit final class DependsOnProject(project: Project) {
private val testConfigurations = Set("test", "fun", "it")
private def findCompileAndTestConfigs(p: Project) =
(p.configurations.map(_.name).toSet intersect testConfigurations) + "compile"
private val thisProjectsConfigs = findCompileAndTestConfigs(project)
private def generateDepsForProject(p: Project) =
p % (thisProjectsConfigs intersect findCompileAndTestConfigs(p) map (c => s"$c->$c") mkString ";")
def compileAndTestDependsOn(projects: Project*): Project =
project dependsOn (projects.map(generateDepsForProject): _*)
}
"org.scalatest" %% "scalatest" % "3.2.3" % configs(Test, It)
projectA.compileAndTestDependsOn(util)
这只是一个示例,您可以编写自己的实用程序来满足您的需求。您也可以将这些String
s 分配给val
s 并改用命名值。
推荐阅读
- css - 仅在右侧对齐可滚动项目
- python - Python (Google Sheets API) - 通过两个单元格的值搜索特定行并从该行返回某些单元格
- gemfire - 使用 Apache Geode 异步写入的多个数据插入
- c# - 点网核心 Web API 中的图像上传
- c# - 强制下拉列表继续
- java - 无法解密使用 Bouncy Castle 编码的文件
- julia - 对具有“缺失”元素的矩阵进行矩阵运算
- javascript - 根据长度格式化一串数字
- javascript - 如何从 Jquery 和 ajax 的响应中下载 JSON 文件
- python - 使用 numpy 方法计算核矩阵