【问题标题】:Setting a module project in Scala as an sbt project?将 Scala 中的模块项目设置为 sbt 项目?
【发布时间】:2015-11-25 14:40:26
【问题描述】:

我想知道如何将常规 scala 项目转换为 sbt 项目。我尝试在根目录上手动创建一个 sbt 文件,正确实现,但 Intellij 仍然无法将其识别为 sbt 项目,即它不会在“查看 - >工具窗口”中显示“SBT” " 选项。

我应该怎么做?我实际上正在尝试做的是创建一个包含多个(独立)模块的空项目。

从我收集到的信息看来,似乎没有办法直接添加一个支持 sbt 的模块,对吗?

谢谢

【问题讨论】:

  • 你想要一个包含 SBT 模块的 Scala 项目还是一个包含多个模块的 SBT 项目?
  • Grrr,好问题。我不知道,在这方面我还是个婴儿。我可能会倾向于前者而不是后者,因为我想在物理上分离项目的不同部分以避免耦合。或者我可以两种方式都这样做吗?具有多个模块的单个 SBT 项目是否允许我从存储库中签出一个模块并构建它?
  • 是的。如果您有多个子项目(又名多项目 SBT),那就更好了。每个项目都有自己的目录、选项、设置等,可以独立编译、打包、测试。项目可以依赖于外部库和依赖于其他子项目。

标签: scala intellij-idea sbt intellij-15


【解决方案1】:

这是一个多项目构建的示例。根项目将它们全部“聚合”,以防您想将它们全部编译或打包在一起等。“coreLibrary”项目取决于“coreA”和“coreB”的代码。

import sbt.Keys._
import sbt._

name := "MultiProject"

lazy val root = project.in(file(".")).aggregate(coreA, coreB, coreLibrary)

lazy val coreA = Project("CoreA", file("core-a")).settings(
  organization := "org.me",
  version := "0.1-SNAPSHOT"
)

lazy val coreB = Project("CoreB", file("core-b")).settings(
  organization := "org.me",
  libraryDependencies += "org.apache.kafka" %% "kafka" % "0.8.2-beta",
  version := "0.3-SNAPSHOT"
)

lazy val coreLibrary = Project("UberCore", file("core-main")).dependsOn(coreA, coreB).settings(
  organization := "org.me",
  version := "0.2-SNAPSHOT"
)

您可以(例如)从命令行编译每个项目:

>sbt CoreB/compile

或者您可以交互地执行此操作:

>sbt
>project CoreB
>compile

【讨论】:

    【解决方案2】:

    我建议您使用单个多模块 SBT 项目。 sbt 是一个很棒的 scala 构建工具,你可以用 sbt 做很多事情,包括从存储库中检出一个模块并构建它。

    sbt
    projects
    project <helloProject>
    

    实际上,此功能允许多人同时处理同一个项目。请看一下:http://www.scala-sbt.org/0.13.5/docs/Getting-Started/Multi-Project.html

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 2016-12-30
      • 2014-08-18
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 2018-04-26
      • 2017-01-16
      • 1970-01-01
      相关资源
      最近更新 更多