Как создать общий корневой проект SBT с различными подпроектами - PullRequest
0 голосов
/ 03 ноября 2018

Я работаю над треком Scala в Exercism , что означает, что у меня много проектов 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")

... но я бы не хотел добавлять каждый проект вручную. Есть ли способ автоматически добавлять новые проекты?

1 Ответ

0 голосов
/ 06 января 2019

Я бы не хотел добавлять каждый проект вручную. Есть ли способ автоматического добавления новых проектов?

Конечно. Это немного продвинутое использование sbt, но вы можете создать специальный плагин, который генерирует подпроекты программно.

build.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

Проект / SubprojectPlugin.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, любые каталоги, которые не называются 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

привет-мир / build.sbt

Для добавления дополнительных настроек вы можете создать файл build.sbt в каталоге следующим образом:

libraryDependencies += "commons-io" % "commons-io" % "2.6"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...