为什么sbt在IDEA中创建项目层和src?

时间:2015-06-30 19:59:14

标签: scala intellij-idea sbt

我是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")

SBTIntelliJ刷新后,我会看到以下

如您所见,即使currentLogProcessormain的设置相同,项目结构也非常不同。

project内的currentLogProcessor看起来不错,但project下的mainprojectsrc

的图层

这是什么问题?如何删除项目中的项目层?

由于 enter image description here

2 个答案:

答案 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

将build.sbt用于项目的构建定义

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 =它很简单,以至于人们很难接受它并且故意弄乱构建定义以便另外声明:)