【问题标题】:using sbt for multi project build使用 sbt 进行多项目构建
【发布时间】:2015-03-11 20:49:04
【问题描述】:

我对 SBT 完全陌生。假设我有三个 Scala 项目:project_a、project_b、project_c。我应该如何将所有三个项目构建到一个 jar 文件中?假设我使用 project_a 作为根项目。目录结构是这样的

--project_a
  --build.sbt
--project_b
--project_c

按照 sbt webiste 上的说明,我创建了一个 build.sbt 文件,看起来像

lazy val root = (project.in(file("."))).aggregate(project_b, project_c)
lazy val project_b = project
lazy val project_c = project

我把 build.sbt 放在 project_a 下。当我在 project_a 下运行 sbt clean compile 时,会在文件夹 project_a 下创建一个新的(有点空的)project_b 和 project_c 文件夹。但是,在 build.sbt 文件中,我的意思是 project_b 和 project_c 指的是我已经创建的包含源代码和测试代码的原始文件夹,并且它们在 project_a 之外。

谁能告诉我我做错了什么?

谢谢

【问题讨论】:

    标签: sbt


    【解决方案1】:

    首先,您的multi-project 设置不正确。

    入门指南说:

    聚合意味着在聚合项目上运行任务也会在聚合项目上运行。

    • 如果您有使用project_bproject_cproject_a,那么您需要root 除了project_aproject_bproject_c。李>
    • Root 可以聚合所有三个(a、b 和 c),但它只聚合提供给 sbt shell 的命令,例如同时编译所有三个。
    • project_a 应设置为依赖于 project_bproject_c

    这是一个例子:

    lazy val commonSettings = Seq(
      scalaVersion := "2.11.4",
      organization := "com.example"
    )
    
    lazy val root = (project in file(".")).
      aggregate(project_a, project_b, project_c).
      settings(commonSettings: _*)
    
    lazy val project_a = project.
      dependsOn(project_b, project_c).
      settings(commonSettings: _*).
      settings(
        // your settings here
      )
    
    lazy val project_b = project.
      settings(commonSettings: _*)
    
    lazy val project_c = project.
      settings(commonSettings: _*)
    

    我应该如何将所有三个项目构建到一个 jar 文件中?

    1. 如果您只需要自己项目中的 *.class 文件,您可以在 Macro Projects 上查看示例。
    2. 如果你想要 *.class 文件和库依赖,你需要 sbt-assembly。

    【讨论】:

      猜你喜欢
      • 2014-12-04
      • 2018-11-18
      • 2013-12-20
      • 2013-09-28
      • 2016-10-01
      • 1970-01-01
      • 2021-05-28
      • 2023-04-10
      • 2012-01-07
      相关资源
      最近更新 更多