【问题标题】:How do I specify a custom directory layout for an sbt project?如何为 sbt 项目指定自定义目录布局?
【发布时间】:2013-03-06 18:08:33
【问题描述】:

如何为基于sbt 的项目指定自定义目录布局?我一直在查看在线sbt 材料,但我很难找到这些信息...

我在文档中找到的是默认位置:

  • 基础目录中的源代码
  • src/main/scalasrc/main/java 中的来源
  • src/test/scalasrc/test/java 中的测试
  • src/main/resourcessrc/test/resources 中的数据文件
  • lib/ 中的非托管 jar 文件

如何在 build.sbt 文件中覆盖这些内容?

我的项目结构目前如下:

  • 来源:[workspace]/sandbox-scala/src/sbt/myFirst/
  • 库位于:[workspace]/java-lib/common/lib/

任何帮助表示赞赏。

【问题讨论】:

    标签: build sbt


    【解决方案1】:

    可以覆盖多个 sbt 的默认目录位置。这是一个覆盖 sbt 期望找到“非托管”依赖项/jar 文件的目录的示例:

    unmanagedBase := baseDirectory.value / "custom-jars-directory"
    

    the sbt documentation 中有更多与依赖相关的示例。)

    您还可以将目录配置为特定于特定“任务”...例如,要设置测试用例源代码所在的目录,请尝试:

    scalaSource in Test := { (baseDirectory in Test)(_ / "test") }.value
    

    然后你的核心应用程序源代码可能在其他地方,比如src/

    scalaSource in Compile := { (baseDirectory in Compile)(_ / "src") }.value
    

    注意:对于旧版本的 sbt,您可能需要以下(现已弃用)语法:

    unmanagedBase <<= baseDirectory { base => base / "custom-jars-directory" }
    scalaSource in Compile <<= (baseDirectory in Compile)(_ / "src")
    

    此语法不适用于较新版本的 sbt(我相信从 0.13.13 开始)。

    【讨论】:

    • SBT 的文档有所改进,但仍需要更多工作。我有代码(从非 JVM 语言移植),其布局中测试与非测试源代码混合(但始终使用特定的“Te​​st.extension”后缀),以及与现有构建过程保持一致的位置,没有构建工件应放置在源代码区域内。甚至开始猜测如何设置 SBT 来做到这一点是完全不明显的,尽管 SBT 足够强大以至于它实际上应该是相当微不足道的。
    • 目前自定义测试目录的语法为:scalaSource in Test := baseDirectory.value / "test"(生产源代码的语法相同)。
    • @MirMasej,我已经更新了答案以反映较新的语法。
    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 2011-04-18
    • 2017-11-30
    • 2013-06-28
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多