I installed JAVA_HOME in C: \ Progra ~ 1 \ Java \ jdk1.6.0_37 and sbt resolved the dependency as C: \ Program Files \ Java \ jdk1.6.0_37 \ jre \ lib \ rt.jar. In this case, Sbt uses java.io.File.equals (), which is incorrect:
In sbt / compile / inc / Incremental.scala:
def externalBinaryModified(entry: String => Option[File], analysis: File => Option[Analysis], previous: Stamps, current: ReadStamps)(implicit equivS: Equiv[Stamp]): File => Boolean = dependsOn => analysis(dependsOn).isEmpty && orTrue( for { name <- previous.className(dependsOn) _ = println("Name: " + name) e <- entry(name) _ = println("entry: " + e) } yield { val resolved = Locate.resolve(e, name) println("resolved: " + resolved) println("dependsOn: " + dependsOn) println("resolved != dependsOn: " + (resolved != dependsOn)) (resolved != dependsOn) || !equivS.equiv(previous.binary(dependsOn), current.binary(resolved)) } )
gives the following result:
Name: java.lang.Object entry: c:\Progra~1\Java\jdk1.6.0_37\jre\lib\rt.jar resolved: c:\Progra~1\Java\jdk1.6.0_37\jre\lib\rt.jar dependsOn: c:\Program Files\Java\jdk1.6.0_37\jre\lib\rt.jar resolved != dependsOn: true
So sbt always thinks rt.jar has been changed.
A workaround would be to install JAVA_HOME in "c: \ Program Files \ Java \ jdk1.6.0_37" The solution should be as follows:
resolved.getCanonicalPath != dependsOn.getCanonicalPath
source share