在我們的程序中,我們可以導入jar或fxml文件以使用自定義JavaFX組件。因此,該文件被複制到一個單獨的目錄中,應用程序僅使用複製的文件來處理掃描等。Java:文件被鎖定在應用程序
在少數情況下,可能會發生這種情況,例如原始jar被更改,並且使用命令「clean」重新編譯。所以這會刪除所有必要的文件,包括導入的jar文件。但是如果我們的應用程序仍在運行,maven會因爲jar無法刪除而失敗。似乎在文件上有一個鎖,可以防止該jar被刪除。只有我們先關閉應用程序,才能最終刪除jar。
那麼是否有任何方法可以釋放文件,以便它不會中斷文件上的任何操作,即使應用程序正在運行?
在複製文件之前刪除文件已失敗。
編輯
好吧,掃描過程的提示是正確的,我認爲。在複製jar之前,程序會掃描原始jar以查找應該包含的組件。該文件在創建JarFile對象後立即鎖定。
public JarReport explore(ClassLoader classLoader) throws IOException {
final JarReport result = new JarReport(jar);
try (JarFile jarFile = new JarFile(jar.toFile())) {
final Enumeration<JarEntry> e = jarFile.entries();
while (e.hasMoreElements()) {
final JarEntry entry = e.nextElement();
result.getEntries().add(exploreEntry(entry, classLoader));
}
}
return result;
}
因此,第4行創建了JarFile對象,這意味着該文件被解壓縮。在這行之後,我無法刪除該jar。那麼我必須關閉解壓後的文件才能刪除它?
請添加一些關於您的掃描過程的更多信息。可能你忘了關閉裏面的東西 –