@@ -113,8 +113,7 @@ public void load(String id, File dataDirectory, Logger logger, LibraryManager li
113113 List <String > versions = getAllVersions (libDirectory , projectDependency .getGroup (), projectDependency .getName ());
114114 List <Dependency > toBeRemovedVersions = versions .stream ().filter (version -> !version .equals (projectDependency .getVersion ())).map (version -> new Dependency (projectDependency .getGroup (), projectDependency .getName (), version , projectDependency .getRelocation (), projectDependency .isStickyLoad ())).toList ();
115115 for (Dependency dependency : toBeRemovedVersions ) {
116- // TODO: Test this
117- // deleteOldVersionDirectory(libDirectory, dependency.getGroup(), dependency.getName(), dependency.getVersion());
116+ deleteOldVersionDirectory (libDirectory , dependency .getGroup (), dependency .getName (), dependency .getVersion ());
118117 }
119118 }
120119 }
@@ -411,25 +410,38 @@ private File versionDirectory(File libFolder, String group, String name, String
411410 return new File (libFolder , groupPath + "/" + name + "/" + version );
412411 }
413412
413+ private boolean isFileInUse (File file ) {
414+ try (RandomAccessFile raf = new RandomAccessFile (file , "rw" )) {
415+ return false ;
416+ } catch (IOException e ) {
417+ return true ;
418+ }
419+ }
420+
414421 private void deleteDirectory (File directory ) throws IOException {
415422 if (!directory .exists ()) return ;
416423
424+ // Check if directory or its files are in use or recently used (last modified < 5 minutes ago)
425+ long now = System .currentTimeMillis ();
426+ long fiveMinutesMillis = 15 * 60 * 1000 ;
417427 File [] files = directory .listFiles ();
418428 if (files != null ) {
419429 for (File file : files ) {
420430 if (file .isDirectory ()) {
431+ // Recursively check subdirectories
421432 deleteDirectory (file );
422433 } else {
423- if (!file .delete ()) {
424- // Try to delete on JVM exit as a fallback
425- file .deleteOnExit ();
426- // Log a warning instead of throwing
427- System .err .println ("Warning: Failed to delete file (in use?): " + file .getAbsolutePath ());
434+ // If file is in use or recently used, skip deletion
435+ if (isFileInUse (file ) || file .lastModified () > now - fiveMinutesMillis ) {
436+ continue ;
428437 }
438+ file .delete ();
429439 }
430440 }
431441 }
432-
442+ if (isFileInUse (directory ) || directory .lastModified () > now - fiveMinutesMillis ) {
443+ return ;
444+ }
433445 if (!directory .delete ()) {
434446 directory .deleteOnExit ();
435447 System .err .println ("Warning: Failed to delete directory (in use?): " + directory .getAbsolutePath ());
0 commit comments