Ich benutze Ameise 1.8.0 und Java 1.6.0.17 und ich bin in einem seltsamen Problem läuft.ant Fehler Kann alte Datei nicht in temporäre Datei umbenennen
In meinem build.xml, ich habe eine einfache Aufgabe, die den Code
<javac destdir="${dir.build.classes}" debug="on">
<classpath refid="classpath"/>
<src path="${dir.src.java}"/>
</javac>
Im "Classpath" ist ein Glas, nennen es library.jar
In einer späteren Aufgabe stellt, muss ich fügen Sie ein paar Klassen zu library.jar
, die ich tun, wie diese
<jar destfile="library.jar" update="true" duplicate="fail">
<fileset dir="${dir.build.classes}">
<include name="some/class/files"/>
</fileset>
</jar>
Dies mit dem Fehler fehl Unable to rename old file (library.jar) to temporary file
Ich steckte in einem Aufruf von handle.exe vor und nach dem javac-Aufruf, und ich kann bestätigen, dass der Java-Prozess, der ant läuft, ein Dateihandle zu library.jar während des javac-Aufrufs ergreift, und es gibt es nicht oben. Dies führt dazu, dass mein späterer Versuch, das jar zu aktualisieren, fehlschlägt.
Warum sollte ant ein Handle für das jar in einem Klassenpfad behalten, der geöffnet ist, selbst nachdem die javac-Task abgeschlossen ist?
in Ant Version behoben ist, können Sie erklären, was Sie meinen „die javac Aufgabe des Classpath explizit gesetzt“? Es ist eine ziemlich große Reihe von Gläsern, die an verschiedenen anderen Orten verwendet wird, also ist es nicht wirklich eine Option, sie hart zu codieren, und ich bin mir nicht sicher, warum es einen Unterschied machen würde. – karoberts