sbt项目中有两个完整的构建定义文件:Build.scala
和Helpers.scala
。它们位于project
文件夹中。
我想将Helpers
模块放入单独的子文件夹project/utils
中。当我在import utils.Helpers
中Build.scala
时,它会说:
未找到:
object utils
是否可以在sbt完整构建定义中定义包后面的目录结构?
答案 0 :(得分:4)
您应该使用project/src/main/scala/utils
代替project/utils
答案 1 :(得分:3)
Sbt构建是recursive,这意味着sbt构建定义是由sbt构建的,应用与普通项目相同的规则。
与Java不同,Scala在包和文件夹结构之间没有严格的关系。这意味着您可以将您的资源放在任何您喜欢的地方,并且它不必匹配包装声明。斯卡拉不会抱怨。
通过选中sourceDirectories
设置密钥,Sbt知道在哪里搜索文件夹。
您可以通过执行show sourceDirectories
轻松检查。但是,这将显示您实际项目的sourceDirectories
。你如何检查它的构建?很容易,执行reload plugins
,这会带你到你的构建。执行show sourceDirectories
,它应该会向您显示它在/project/src/main/scala
,project/src/main/java
和另外一个中查找来源,这些来源是受管理来源(对我们来说并不重要)。现在,您可以执行reload return
返回主项目。
鉴于您应该能够创建一个对象,请在Helpers
中命名为project/src/main/scala/utils/Helpers.scala
:
package utils
object Helpers {
def printFancy(name: String) = println(s">>$name<<")
}
并在Build.scala
:
import sbt._
import Keys._
import utils.Helpers._
object MyBuild extends Build {
val printProjectName = taskKey[Unit]("Prints fancy project name")
lazy val root = project.in(file(".")).settings(
printProjectName := printFancy(name.value)
)
}
您可以通过执行printProjectName
来测试它。
> printProjectName
>>root<<
[success] Total time: 1 s, completed May 29, 2014 1:24:16 AM
我之前说过,sbt是递归的。这意味着,如果需要,可以使用相同的技术来配置sbt构建,就像用于配置自己项目的构建一样。
如果您不希望将文件保留在/project/src/main/scala
下,但只是在/project/utils
下,则可以通过在{{1}中创建build.sbt
来实现此目的文件夹,包含以下内容:
project
就像described in the documentation
一样现在即使你将你的工具放在unmanagedSourceDirectories in Compile += baseDirectory.value / "utils"
sbt也应该能够找到它。