6

Sbt は、変更されたバイナリ依存関係のために常に完全な再構築を行います: rt.jar:

[debug] 
[debug] Initial source changes: 
[debug]     removed:Set()
[debug]     added: Set()
[debug]     modified: Set()
[debug] Removed products: Set()
[debug] Modified external sources: Set()
[debug] Modified binary dependencies: Set(C:\Program Files\Java\jdk1.6.0_37\jre\lib\rt.jar)
[debug] Initial directly invalidated sources: Set()

明らかに、rt.jar は変更されていません。その作成日、アクセス日、変更日は同じで、かなり古いものです。

c:\Program Files\Java\jdk1.6.0_37\jre\lib\ にあります。

JAVA_HOME は C:\Progra~1\Java\jdk1.6.0_37 として設定されています

JAVA_HOME/bin は PATH にあります。

sbt が rt.jar が変更されたと考える理由はありますか?

4

1 に答える 1

3

JAVA_HOME を C:\Progra~1\Java\jdk1.6.0_37 に設定し、sbt で依存関係を C:\Program Files\Java\jdk1.6.0_37\jre\lib\rt.jar として解決しました。Sbt は、この場合正しくない java.io.File.equals() を使用します。

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))
            }
        )

次の出力が得られます。

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

したがって、sbt は常に rt.jar が変更されたと認識します。

回避策は、JAVA_HOME を "c:\Program Files\Java\jdk1.6.0_37" に設定することです。

resolved.getCanonicalPath != dependsOn.getCanonicalPath
于 2012-10-22T10:55:02.990 に答える