如何为sbt项目指定自定义目录布局?

9
我该如何为基于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/ 非常感谢您的帮助。
1个回答

3

您可以覆盖一些sbt的默认目录位置。以下是一个示例,覆盖了sbt期望找到“未管理”的依赖项/ jar文件的目录:

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

(有关依赖项的更多示例,请参见sbt文档。)

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

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语言移植),其中测试与非测试源代码交织在一起(但始终使用特定的“Test.extension”后缀),为了与现有的构建过程保持一致,不应该将任何构建产物放置在源代码区域内。即使开始猜测如何设置SBT来完成这个任务也是完全不明显的,尽管可以假设SBT足够强大,实际上应该相当容易做到。 - newbrific
目前自定义测试目录的语法是:scalaSource in Test := baseDirectory.value / "test"(生产源代码的语法相同)。 - MirMasej
@MirMasej,我已经更新了答案以反映较新的语法。 - Chris W.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接