3

我观察到 SBT 每次发出“编译”任务时都会编译所有源文件,而不管自上次编译以来的时间戳。以下是我的 build.sbt 文件:

name := "HelloSbt"

scalaVersion := "2.8.2"

unmanagedSourceDirectories in Compile := List(file("src"))

以下是我的项目结构(忽略项目和目标目录):

./src
./src/Hello1.scala
./src/a
./src/a/Hello2.scala
./build.sbt

这两个源文件只是用于测试目的的空对象定义。

当我输入“sbt compile”时,我得到了以下信息:

[info] Compiling 2 Scala sources to...

我可以在目标目录中找到新编译的类文件。

在不修改任何源文件的情况下,一分钟后,再次输入“sbt compile”,我得到了相同的信息和类文件,除了类文件的时间戳是最新的。我期待第二次编译不会找到任何修改过的源文件,也不应该发生编译。

我在 Windows 7 和 Debian 中都进行了测试。在测试期间,我没有打开任何编辑器。有人可以提供一些关于如何设置自定义 src 目录的提示,同时仍然只能编译自上次构建以来修改过的文件?

谢谢

4

1 回答 1

1

那是因为您使用的是相对路径,就好像它是绝对路径一样。我很惊讶它甚至会产生结果,但是,无论如何,你应该这样写:

unmanagedSourceDirectories in Compile <<= baseDirectory(base => List(base / "src"))
于 2012-05-16T05:49:55.193 回答