Ant 1.8.0 と Java 1.6.0.17 を使用していますが、奇妙な問題が発生しています。
私のbuild.xmlには、コードをコンパイルする簡単なタスクがあります
<javac destdir="${dir.build.classes}" debug="on">
<classpath refid="classpath"/>
<src path="${dir.src.java}"/>
</javac>
「クラスパス」にはjarがあり、それを呼び出しますlibrary.jar
後のタスクで、いくつかのクラスを に追加する必要がありますlibrary.jar
。
<jar destfile="library.jar" update="true" duplicate="fail">
<fileset dir="${dir.build.classes}">
<include name="some/class/files"/>
</fileset>
</jar>
これはエラーで失敗します
Unable to rename old file (library.jar) to temporary file
javac 呼び出しの前後に handle.exe の呼び出しにスタックしました。ant を実行している Java プロセスが、javac 呼び出し中に library.jar へのファイル ハンドルを取得し、放棄していないことを確認できます。これにより、後でjarを更新しようとして失敗します。
javac タスクが完了した後でも、ant がクラスパス内の jar へのハンドルを開いたままにしておくのはなぜですか?