我试图在sbt中动态注册Project
s:
lazy val dirs = new File("path").listFiles().filter(_.isDirectory)
val subprojects = dirs.map { p =>
Project(p.getName, p).settings(name := p.getName)
}
lazy val root = (project in file("."))
.settings(
name := "gen",
libraryDependencies ++= dependencies
)
val root2 = subprojects.foldLeft(root)((x, y) => x.aggregate(y))
但是当执行时,我得到:
在'file:/path'中没有项目'a- subproject '.
似乎项目在创建它们为Project
时没有被注册:
val subprojects = dirs.map { p =>
Project(p.getName, p).settings(name := p.getName)
}
我也试过这样:
lazy val root = (project in file("."))
.aggregate(subprojects:_*)
.settings(
name := "gen",
libraryDependencies ++= dependencies
)
我:
此处不允许':_*'注释(这种注释只允许在-parameters的参数中使用).aggregate(子项目:_)
如果我在sbt
上运行projects
,则没有子项目列出。
如果你用下面的声明替换你的subprojects
声明,它应该工作:
val subprojects = new CompositeProject {
override def componentProjects: Seq[Project] = dirs.map { p =>
Project(p.getName, p).settings(name := p.getName)
}
}
,因为它应该在CompositeProject
中注册所有子项目,并允许您聚合它们