我正在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")
Run Code Online (Sandbox Code Playgroud)
...但是我想避免必须手动添加每个项目。有没有办法自动添加新项目?
我想避免必须手动添加每个项目。有没有办法自动添加新项目?
当然。它是sbt的高级用法,但是您可以创建一个临时插件,以编程方式生成子项目。
ThisBuild / scalaVersion := "2.12.8"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "com.example"
ThisBuild / organizationName := "example"
Run Code Online (Sandbox Code Playgroud)
sbt.version=1.2.8
Run Code Online (Sandbox Code Playgroud)
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您启动sbt,则任何未命名目录target或project将导致子目录的目录。
sbt:generic-root> projects
[info] In file:/private/tmp/generic-root/
[info] * generic-root
[info] hello_world
[info] robot_name
[info] sum_of_multiple
Run Code Online (Sandbox Code Playgroud)
要添加更多设置,您可以build.sbt在目录下创建文件,如下所示:
libraryDependencies += "commons-io" % "commons-io" % "2.6"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |