В настоящее время я разрабатываю приложение, которое клонирует репозитории Git благодаря JGit (http://wiki.eclipse.org/JGit/User_Guide) каждый раз, когда пользователь входит в систему. Когда пользователь хочет выйти из приложения, я хочу удалить клон. Вот и проблема: при клонировании репозитория создается папка .git, в которой можно найти файл .pack (.git/objects/pack/sutpideFile.pack) и который не может быть удален, поскольку платформа Java блокируется он (при попытке удалить его вручную, получите ошибку «Действие не может быть завершено, потому что файл открыт в Java (TM) Platform SE binary»).
ЭТО ЗНАТЬ ПРОБЛЕМА С Jgit: .pack file from git repo can't be deleted using File delete() method. Таким образом, я использовал предлагаемое здесь решение: https://github.com/ajoberstar/grgit/issues/33, которое должно добавить эти три строки до моего метода удаления:
WindowCacheConfig config = new WindowCacheConfig();
config.setPackedGitMMAP (true);
WindowCache.install (config);
Но что действительно беспокоит меня, потому что я не понимаю, что это решение работает только один раз: Я запускаю сервер (TomCat), подключение, а затем отключить. Здесь вся папка удаляется. Однако, когда я снова подключаюсь и отключается (без повторного запуска сервера), там восстает файл, и я больше не могу его удалять, пока не завершу работу сервера.
Есть ли у кого-нибудь слабая идея, почему это работает, но только один раз?Как удалить файл, заблокированный платформой Java?
Спасибо за вашу помощь,
EDIT:. Ну, так что я просто нужно добавить git.getRepository() близко();, когда я заканчиваю использовать объект Git. Тогда удаление возможно!
Вы попробовали второе решение из вопроса, на который указали? т.е. http://stackoverflow.com/a/30184334/4807777 –
Имеет ли ['File.deleteOnExit()'] (http://docs.oracle.com/javase/8/docs/api/java/io/File. html # deleteOnExit--) help? –
@LaurentiuL. : yep, close(); уже пробовал! – Ekatsim