gpt4 book ai didi

scala - 如何创建具有不同子项目的通用 SBT 根项目

转载 作者:行者123 更新时间:2023-12-03 21:27:03 24 4
gpt4 key购买 nike

我在 Exercism 的 Scala 轨道上工作这意味着我在根文件夹中有很多 SBT 项目。我想创建一个根 SBT 项目,它会在我下载新练习时自动添加新的子项目。目前我必须手动添加它们,所以我的根 build.sbt看起来像这样:

lazy val root = (project in file("."))
.aggregate(
hello_world,
sum_of_multiples,
robot_name)

lazy val hello_world = project in file("hello-world")
lazy val sum_of_multiples = project in file("sum-of-multiples")
lazy val robot_name = project in file("robot-name")

...但我想避免手动添加每个项目。有没有办法自动添加新项目?

最佳答案

I'd like to avoid having to add every project manually. Is there a way to add new projects automatically?



当然。这是 sbt 的高级用法,但您可以创建一个临时插件,以编程方式生成子项目。

生成.sbt

ThisBuild / scalaVersion     := "2.12.8"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "com.example"
ThisBuild / organizationName := "example"

项目/build.properties
sbt.version=1.2.8

项目/子项目插件.scala
import sbt._

object SubprojectPlugin extends AutoPlugin {
override val requires = sbt.plugins.JvmPlugin
override val trigger = allRequirements
override lazy val extraProjects: Seq[Project] = {
val dirs = (file(".") * ("*" -- "project" -- "target")) filter { _.isDirectory }
dirs.get.toList map { dir =>
Project(dir.getName.replaceAll("""\W""", "_"), dir)
}
}
}

现在,如果您启动 sbt , 任何未命名的目录 targetproject将产生一个子项目。
sbt:generic-root> projects
[info] In file:/private/tmp/generic-root/
[info] * generic-root
[info] hello_world
[info] robot_name
[info] sum_of_multiple

Hello World /build.sbt

要添加更多设置,您可以创建 build.sbt目录下的文件如下:
libraryDependencies += "commons-io" % "commons-io" % "2.6"

关于scala - 如何创建具有不同子项目的通用 SBT 根项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53129745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com