我观察到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目录的提示,同时仍然只能编译自上次构建以来修改过的文件吗?
由于
答案 0 :(得分:1)
那是因为您使用相对路径就好像它是绝对路径一样。我很惊讶它甚至会产生结果,但是,无论如何,你应该这样写:
unmanagedSourceDirectories in Compile <<= baseDirectory(base => List(base / "src"))