如何删除Java平台锁定的文件?

如何删除Java平台锁定的文件?,java,eclipse,git,jgit,Java,Eclipse,Git,Jgit,我目前正在开发一个应用程序,它可以在用户每次登录时通过JGit()克隆Git存储库。当用户想退出应用程序时,我想删除克隆。 问题是:克隆存储库时,会创建一个文件夹.git,其中可以找到一个文件.pack(.git/objects/pack/sutpideFile.pack),该文件无法删除,因为Java平台正在锁定它(当试图手动删除它时,会出现错误“该操作无法完成,因为该文件是在Java(TM)平台SE二进制文件中打开的”). 这是Jgit的已知问题:。 因此,我使用了这里提出的解决方案:在删除

我目前正在开发一个应用程序,它可以在用户每次登录时通过JGit()克隆Git存储库。当用户想退出应用程序时,我想删除克隆。 问题是:克隆存储库时,会创建一个文件夹.git,其中可以找到一个文件.pack(.git/objects/pack/sutpideFile.pack),该文件无法删除,因为Java平台正在锁定它(当试图手动删除它时,会出现错误“该操作无法完成,因为该文件是在Java(TM)平台SE二进制文件中打开的”).

这是Jgit的已知问题:。 因此,我使用了这里提出的解决方案:在删除方法之前添加这三行:
WindowCacheConfig=新建WindowCacheConfig()
config.setPackedGitMMAP(true)
WindowCache.install(配置)

但真正困扰我的是,我不明白这个解决方案只运行一次:我启动服务器(TomCat),连接,然后断开连接。在这里,整个文件夹被删除。但是,当我重新连接和断开连接(而不重新启动服务器)时,会出现文件冲突,在关闭服务器之前,我无法再删除文件。

有谁知道它为什么会起作用,但只有一次

谢谢你的帮助

编辑: 那么,我只需要添加git.getRepository().close()当我完成使用Git对象时。那么就可以删除了

这是一个问题,请参见

基本上,您当前需要添加对“Git.getRepository().close()”的调用,以便在发布新版本的JGit之前释放所有文件系统锁

result = Git.cloneRepository()
        .setURI( 'https://github.com/github/testrepo.git' )
        .setDirectory( localPath )
        .call();

// this is currently necessary to free all file locks
result.getRepository().close();

result.close();

JGit 4.1计划对此进行修复。

您是否尝试过所指问题的第二种解决方案?i、 e.有帮助吗?@LaurentiuL.:是的,关闭();已经试过了@哈姆扎阿巴德:试了一下,也没用。我在这个页面上看到FileLock类也可以使用,但是失败了。不过多亏了你们两个=)@LaurentiuL。哦等等。。。实际上,我似乎读得太快了。。几天来,我试图在Git对象上使用close()方法。。。而我应该在存储库上完成它。。。非常感谢你!它起作用了!!你太棒了!!