首页 > 解决方案 > 在 build.sbt 之外的另一个文件中定义子项目

问题描述

我正在尝试定义一个带有后续数量的子项目的多项目构建:

.
├── build.sbt
├── project/
│   ├── dependencies.scala
│   ├── tasks.scala
│   └── settings.scala
├── lib_1/
│   └── src/
├── ...
└── lib_n/
    └── src/

这些子项目目前定义在build.sbt

val outputJarFolder = "/some/path/"
lazy val comonSettings = /* ... */

lazy val lib_1 = (project in file ("lib1")).settings(
    name:="LibOne",
    commonSettings,
    libraryDependencies ++= Seq(scalaTest, jsonLib, scalaXML, commonsIo),
    Compile/packageBin/artifactPath := file(outputJarFolder + "lib1.jar")
)

// ... more libs ...

lazy val lib_n = (project in file ("libn")).settings(
    name:="LibLast",
    commonSettings,
    Compile/packageBin/artifactPath := file(outputJarFolder + "libn.jar")
)
    .depensOn(lib_2, lib_12)

我如何在 build.sbt 之外的另一个文件中定义这些子项目以“疏通”该文件?我希望仍然能够按字典顺序定义它们(这lazy是必须的)。我正在使用 sbt 版本 1.2.8 和 scala 2.10。


我试过了:

  1. 将这些lib_k变量的声明放在一个 scala 文件中并导入它——> sbt 说:“类不能是懒惰的”
  2. 将这些声明放在一个对象中(或放在一个类中并在其中实例化它build.sbt)-->sbt projects不会列出任何子项目。

标签: scalasbt

解决方案


sbt文档提到了它,但没有过多强调(也许是为了避免鼓励在没有通用约定的情况下定义构建的方式有太多变化):

构建定义在项目基目录中的build.sbt实际上是任何名为的文件)中进行了描述。*.sbt

因此,您可以将build.sbt文件拆分为项目根目录中具有不同名称的多个单独.sbt文件。

我还建议阅读有关组织构建的文档。


推荐阅读