我有一个看起来像这样的构建
thing/
build.sbt
clientserver/
build.sbt
client/
...
server/
...
//build.sbt
val clientserver = project.in(file("clientserver"))...
//clientserver/build.sbt
val client = project.in(file("client"))...
val server = project.in(file("server"))...
如何在SBT控制台中引用这些子项目? clientserver/client/compile
或clientserver.client/compile
不起作用
答案 0 :(得分:1)
必须在顶级构建中定义所有项目定义。但是,您可以拥有基本目录深度为2级的项目。
因此,对于您的示例,您应该在thing/build.sbt
中使用以下内容:
lazy val clientserver = project.in(file("clientserver"))...
lazy val clientserverClient = project.in(file("clientserver/client"))...
lazy val clientserverServer = project.in(file("clientserver/server"))...
在sbt控制台中,它们分别被称为clientserverClient
和clientserverServer
。
答案 1 :(得分:0)
你如何使用sbt?是什么意思,通过IDE或命令行?我在IntelliJ中遇到了多模块项目的问题,但最近的更新解决了我的问题。
更新包括IntelliJ本身(从13.3到14.0)和scala-plugin到1.1版本。
当我以前从非IDE运行我的项目时,一切顺利,但当我切换到IntelliJ时,它是自动创建模块scala facets以及是什么使它无法编译。第二个问题是文件夹名称包含空格char - UriException。这两个更新都解决了问题。
你可以检查它是否可以从cmd行运行?如果是这样,你能否将所有子模块定义放到' thing / build.sbt'尝试一下?我将我的项目定义为下面的片段,但是在Scala对象中(扩展了构建特征),它就像魅力一样。
lazy val root = Project(
id = "root",
file ("."),
settings = buildSettings
++ Seq (description := "root")
++ Seq (libraryDependencies ++= commonDependencies)
) aggregate core
lazy val core = Project(
id = "Core",
base = file ("Core module"),
settings = buildSettings
++ Seq (description := "Core desc")
++ Seq (libraryDependencies ++= commonDependencies)
)