我是SBT
的新手并试图建立一个项目。我的Build.scala
看起来像
lazy val ec = project.in(file("."))
.settings(commonSettings: _*)
.settings(name := "ec")
.aggregate(ahka, currentLogProcessor, main)
lazy val currentLogProcessor = project.in(file("currentLogProcessor"))
.settings(commonSettings: _*)
.settings(name := "currentlogprocessor")
.settings(
libraryDependencies += "com.myorg.util" % "LP" % "0.18.0-SNAPSHOT" % "provided"
)
lazy val main = project
.settings(commonSettings: _*)
.settings(name := "main")
在SBT
中IntelliJ
刷新后,我会看到以下
如您所见,即使currentLogProcessor
和main
的设置相同,项目结构也非常不同。
project
内的currentLogProcessor
看起来不错,但project
下的main
是project
和src
的图层
这是什么问题?如何删除项目中的项目层?
由于
答案 0 :(得分:1)
您的项目 ec 和 main 共享同一个文件夹。删除主或 ec ,或为其中一个更改“ in file ”。
lazy val main = project in file("another_path") ...
答案 1 :(得分:0)
@ ka4eli的答案是正确的,但我想指出构建定义中的一些问题,这些问题可以让它理解得那么痛苦。
lazy val ec = project.in(file("."))
.settings(commonSettings: _*)
.settings(name := "ec")
.aggregate(ahka, currentLogProcessor, main)
你不需要它,因为它无论如何都是自动定义的 - 你只是重复隐含的sbt。只需将其从构建中删除,然后使用以下内容添加build.sbt
:
commonSettings
lazy val currentLogProcessor = project.in(file("currentLogProcessor"))
.settings(commonSettings: _*)
.settings(name := "currentlogprocessor")
.settings(
libraryDependencies += "com.myorg.util" % "LP" % "0.18.0-SNAPSHOT" % "provided"
)
默认情况下,lazy val
的名称用于调用项目project
宏应该指向,即不需要in(file("currentLogProcessor"))
。这同样适用于name
设置 - 您使用的全小写名称可能需要也可能不需要。
使用build.sbt
目录下的currentLogProcessor
具有相同的效果:
name := "currentlogprocessor"
commonSettings
libraryDependencies += "com.myorg.util" % "LP" % "0.18.0-SNAPSHOT" % "provided"
就这么简单。
将规则应用于main
项目。
玩sbt =它很简单,以至于人们很难接受它并且故意弄乱构建定义以便另外声明:)