Я хотел бы изобрести систему до динамически обнаруживать подпроекты и автоматически сводить их в мой проект. Или, по крайней мере, настроить это как-то.sbt: динамическая агрегация подпроекта
Для этого я планирую иметь либо папку «modules», либо файл конфигурации, содержащий пути к модулям.
В любом случае я должен был бы проходным подпапок (или цикл по списку путей из конфигурационного файла), и агрегировать каждый подпроект. Я не знаю, как это сделать.
В настоящее время я строю в рамках игры с файлом build.sbt
. Мне нужно будет добавить петлю следующим образом:
name := "mysite"
version := "1.0"
scalaVersion := "2.11.1"
lazy val root = (project in file(".")).enablePlugins(PlayJava)
//pseudocode:
foreach(folder in the 'modules' folder) {
lazy val module = (project in file(folder)).enablePlugins(PlayJava)
root = root.dependsOn(module).aggregate(module)
}
Есть ли способ сделать это?
EDIT 3: Код здесь почти работает:
object MyBuild extends Build {
name := "mysite"
version := "1.0"
scalaVersion := "2.11.6"
var m = new File("modules")
var list = Seq[ProjectReference]()
var deps = Seq[ClasspathDependency]()
if (m.exists) {
val subs = m.listFiles.filter (_.isDirectory).foreach { folder =>
var modulePath = new File("modules", folder.getName)
println("Found module " + modulePath)
lazy val module:ProjectRef = ProjectRef(modulePath,folder.getName)
lazy val dep:ClasspathDependency = ClasspathDependency(module, None)
list = list :+ module
deps = deps :+ dep
}
}
lazy val root = Project(id = "mysite", base = file(".")).enablePlugins(PlayJava).aggregate(list:_*).dependsOn(deps:_*)
}
Редактировать 4: решение
знакомства Дейла Wijnand в ниже.
Об ошибке: RuntimeException: No project 'myModule' in 'file:/Users/me/mysite/modules/myModule'
. Я исправил это с помощью раствора из https://stackoverflow.com/a/28820578
Каков вывод 'println (« Найденный модуль »+ folder.getName)'? – Peanut
это «Найден модуль foo» (папка моего модуля называется «foo»). Кажется, что r.depends (модуль) терпит неудачу. Это может быть не объект проекта. По какой-то причине. – Emmanuel