You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2017/09/11 20:32:05 UTC

archiva git commit: Migrating metadata file store to java.nio

Repository: archiva
Updated Branches:
  refs/heads/master a7db09420 -> a446c0385


Migrating metadata file store to java.nio


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/a446c038
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/a446c038
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/a446c038

Branch: refs/heads/master
Commit: a446c038534d32994762e051cbea170499e51bbe
Parents: a7db094
Author: Martin Stockhammer <ma...@ars.de>
Authored: Mon Sep 11 22:31:13 2017 +0200
Committer: Martin Stockhammer <ma...@ars.de>
Committed: Mon Sep 11 22:31:13 2017 +0200

----------------------------------------------------------------------
 .../repository/file/FileMetadataRepository.java | 250 ++++++++-----------
 .../file/FileMetadataRepositoryTest.java        |  21 +-
 2 files changed, 119 insertions(+), 152 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/a446c038/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
index 7a3af1a..55f9ffb 100644
--- a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
@@ -21,47 +21,21 @@ package org.apache.archiva.metadata.repository.file;
 
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.metadata.model.ArtifactMetadata;
-import org.apache.archiva.metadata.model.CiManagement;
-import org.apache.archiva.metadata.model.Dependency;
-import org.apache.archiva.metadata.model.IssueManagement;
-import org.apache.archiva.metadata.model.License;
-import org.apache.archiva.metadata.model.MailingList;
-import org.apache.archiva.metadata.model.MetadataFacet;
-import org.apache.archiva.metadata.model.MetadataFacetFactory;
-import org.apache.archiva.metadata.model.Organization;
-import org.apache.archiva.metadata.model.ProjectMetadata;
-import org.apache.archiva.metadata.model.ProjectVersionMetadata;
-import org.apache.archiva.metadata.model.ProjectVersionReference;
-import org.apache.archiva.metadata.model.Scm;
+import org.apache.archiva.metadata.model.*;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.MetadataResolutionException;
-import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.nio.file.Files;
-import java.nio.file.NoSuchFileException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
+import java.nio.file.*;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 public class FileMetadataRepository
     implements MetadataRepository
@@ -87,7 +61,7 @@ public class FileMetadataRepository
         this.configuration = configuration;
     }
 
-    private File getBaseDirectory( String repoId )
+    private Path getBaseDirectory(String repoId )
         throws IOException
     {
         // TODO: should be configurable, like the index
@@ -95,16 +69,16 @@ public class FileMetadataRepository
             configuration.getConfiguration().getManagedRepositoriesAsMap().get( repoId );
         if ( managedRepositoryConfiguration == null )
         {
-            return Files.createTempDirectory( repoId ).toFile();
+            return Files.createTempDirectory( repoId );
         }
         String basedir = managedRepositoryConfiguration.getLocation();
-        return new File( basedir, ".archiva" );
+        return Paths.get( basedir, ".archiva" );
     }
 
-    private File getDirectory( String repoId )
+    private Path getDirectory( String repoId )
         throws IOException
     {
-        return new File( getBaseDirectory( repoId ), "content" );
+        return getBaseDirectory( repoId ).resolve( "content" );
     }
 
     @Override
@@ -120,16 +94,15 @@ public class FileMetadataRepository
 
         try
         {
-            File namespaceDirectory = new File( getDirectory( repoId ), namespace );
+            Path namespaceDirectory = getDirectory( repoId ).resolve( namespace );
             Properties properties = new Properties();
             properties.setProperty( "namespace", namespace );
             properties.setProperty( "id", id );
-            writeProperties( properties, new File( namespaceDirectory, id ), PROJECT_METADATA_KEY );
+            writeProperties( properties, namespaceDirectory.resolve( id ), PROJECT_METADATA_KEY );
         }
         catch ( IOException e )
         {
-            // TODO!
-            log.error( e.getMessage(), e );
+            log.error( "Could not update project {}, {}, {}: {}", repoId, namespace, id, e.getMessage(), e );
         }
     }
 
@@ -142,8 +115,8 @@ public class FileMetadataRepository
         {
             updateProject( repoId, namespace, projectId );
 
-            File directory =
-                new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + versionMetadata.getId() );
+            Path directory =
+                getDirectory( repoId ).resolve( namespace + "/" + projectId + "/" + versionMetadata.getId() );
 
             Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
             // remove properties that are not references or artifacts
@@ -235,8 +208,7 @@ public class FileMetadataRepository
         }
         catch ( IOException e )
         {
-            // TODO
-            log.error( e.getMessage(), e );
+            log.error( "Could not update project version {}, {}, {}: {}", repoId, namespace, versionMetadata.getId(), e.getMessage(), e );
         }
     }
 
@@ -278,7 +250,7 @@ public class FileMetadataRepository
     {
         try
         {
-            File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+            Path directory = getDirectory( repoId ).resolve( namespace + "/" + projectId + "/" + projectVersion );
 
             Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
             int i = Integer.parseInt( properties.getProperty( "ref:lastReferenceNum", "-1" ) ) + 1;
@@ -292,8 +264,7 @@ public class FileMetadataRepository
         }
         catch ( IOException e )
         {
-            // TODO
-            log.error( e.getMessage(), e );
+            log.error( "Could not update project reference {}, {}, {}, {}: {}", repoId, namespace, projectId, projectVersion, e.getMessage(), e );
         }
     }
 
@@ -302,7 +273,7 @@ public class FileMetadataRepository
     {
         try
         {
-            File namespaceDirectory = new File( getDirectory( repoId ), namespace );
+            Path namespaceDirectory = getDirectory( repoId ).resolve( namespace );
             Properties properties = new Properties();
             properties.setProperty( "namespace", namespace );
             writeProperties( properties, namespaceDirectory, NAMESPACE_METADATA_KEY );
@@ -310,8 +281,7 @@ public class FileMetadataRepository
         }
         catch ( IOException e )
         {
-            // TODO!
-            log.error( e.getMessage(), e );
+            log.error( "Could not update namespace of {}, {}: {}", repoId, namespace, e.getMessage(), e );
         }
     }
 
@@ -321,9 +291,16 @@ public class FileMetadataRepository
     {
         try
         {
-            File directory = getMetadataDirectory( repoId, facetId );
-            List<String> facets = new ArrayList<>();
-            recurse( facets, "", directory );
+            Path directory = getMetadataDirectory( repoId, facetId );
+            if (!(Files.exists(directory) && Files.isDirectory(directory))) {
+                return Collections.emptyList();
+            }
+            List<String> facets;
+            final String searchFile = METADATA_KEY + ".properties";
+            try(Stream<Path> fs = Files.walk(directory, FileVisitOption.FOLLOW_LINKS) ) {
+                facets = fs.filter(Files::isDirectory).filter(path -> Files.exists(path.resolve(searchFile)))
+                        .map(path -> directory.relativize(path).toString()).collect(Collectors.toList());
+            }
             return facets;
         }
         catch ( IOException e )
@@ -336,29 +313,24 @@ public class FileMetadataRepository
     public boolean hasMetadataFacet( String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
-        // TODO could be improved a bit
-        return !getMetadataFacets( repositoryId, facetId ).isEmpty();
-    }
 
-    private void recurse( List<String> facets, String prefix, File directory )
-    {
-        File[] list = directory.listFiles();
-        if ( list != null )
-        {
-            for ( File dir : list )
-            {
-                if ( dir.isDirectory() )
-                {
-                    recurse( facets, prefix + "/" + dir.getName(), dir );
-                }
-                else if ( dir.getName().equals( METADATA_KEY + ".properties" ) )
-                {
-                    facets.add( prefix.substring( 1 ) );
-                }
+        try {
+            Path directory = getMetadataDirectory(repositoryId, facetId);
+            if (!(Files.exists(directory) && Files.isDirectory(directory))) {
+                return false;
+            }
+            final String searchFile = METADATA_KEY + ".properties";
+            try (Stream<Path> fs = Files.walk(directory, FileVisitOption.FOLLOW_LINKS)) {
+                return fs.filter(Files::isDirectory).anyMatch(path -> Files.exists(path.resolve(searchFile)));
             }
+        } catch (IOException e) {
+            log.error("Could not retrieve facet metatadata {}, {}: {}", repositoryId, facetId, e.getMessage(), e);
+            throw new MetadataRepositoryException(e.getMessage(), e);
         }
+
     }
 
+
     @Override
     public MetadataFacet getMetadataFacet( String repositoryId, String facetId, String name )
     {
@@ -366,16 +338,15 @@ public class FileMetadataRepository
         try
         {
             properties =
-                readProperties( new File( getMetadataDirectory( repositoryId, facetId ), name ), METADATA_KEY );
+                readProperties( getMetadataDirectory( repositoryId, facetId ).resolve( name ), METADATA_KEY );
         }
-        catch ( FileNotFoundException e )
+        catch ( NoSuchFileException | FileNotFoundException e )
         {
             return null;
         }
         catch ( IOException e )
         {
-            // TODO
-            log.error( e.getMessage(), e );
+            log.error( "Could not read properties from {}, {}: {}", repositoryId, facetId, e.getMessage(), e );
             return null;
         }
         MetadataFacet metadataFacet = null;
@@ -402,8 +373,8 @@ public class FileMetadataRepository
 
         try
         {
-            File directory =
-                new File( getMetadataDirectory( repositoryId, metadataFacet.getFacetId() ), metadataFacet.getName() );
+            Path directory =
+                getMetadataDirectory( repositoryId, metadataFacet.getFacetId() ).resolve( metadataFacet.getName() );
             writeProperties( properties, directory, METADATA_KEY );
         }
         catch ( IOException e )
@@ -419,8 +390,8 @@ public class FileMetadataRepository
     {
         try
         {
-            File dir = getMetadataDirectory( repositoryId, facetId );
-            FileUtils.deleteDirectory( dir );
+            Path dir = getMetadataDirectory( repositoryId, facetId );
+            org.apache.archiva.common.utils.FileUtils.deleteDirectory( dir );
         }
         catch ( IOException e )
         {
@@ -434,8 +405,8 @@ public class FileMetadataRepository
     {
         try
         {
-            File dir = new File( getMetadataDirectory( repoId, facetId ), name );
-            FileUtils.deleteDirectory( dir );
+            Path dir = getMetadataDirectory( repoId, facetId ).resolve( name );
+            org.apache.archiva.common.utils.FileUtils.deleteDirectory( dir );
         }
         catch ( IOException e )
         {
@@ -509,7 +480,7 @@ public class FileMetadataRepository
         {
             Map<String, ArtifactMetadata> artifacts = new HashMap<>();
 
-            File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+            Path directory = getDirectory( repoId ).resolve( namespace + "/" + projectId + "/" + projectVersion );
 
             Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
 
@@ -689,8 +660,8 @@ public class FileMetadataRepository
     {
         try
         {
-            File namespaceDirectory = new File( getDirectory( repositoryId ), project );
-            FileUtils.deleteDirectory( namespaceDirectory );
+            Path namespaceDirectory = getDirectory( repositoryId ).resolve( project );
+            org.apache.archiva.common.utils.FileUtils.deleteDirectory( namespaceDirectory );
             //Properties properties = new Properties();
             //properties.setProperty( "namespace", namespace );
             //writeProperties( properties, namespaceDirectory, NAMESPACE_METADATA_KEY );
@@ -709,7 +680,7 @@ public class FileMetadataRepository
 
         try
         {
-            File directory = new File( getDirectory( artifactMetadata.getRepositoryId() ),
+            Path directory = getDirectory( artifactMetadata.getRepositoryId() ).resolve(
                                        artifactMetadata.getNamespace() + "/" + artifactMetadata.getProject() + "/"
                                            + baseVersion );
 
@@ -750,7 +721,7 @@ public class FileMetadataRepository
     {
         try
         {
-            File directory = new File( getDirectory( repoId ), namespace + "/" + project + "/" + version );
+            Path directory = getDirectory( repoId ).resolve( namespace + "/" + project + "/" + version );
 
             Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
 
@@ -772,7 +743,7 @@ public class FileMetadataRepository
                 }
             }
 
-            FileUtils.deleteDirectory( directory );
+            org.apache.archiva.common.utils.FileUtils.deleteDirectory( directory );
             //writeProperties( properties, directory, PROJECT_VERSION_METADATA_KEY );
         }
         catch ( IOException e )
@@ -805,8 +776,8 @@ public class FileMetadataRepository
     {
         try
         {
-            File dir = getDirectory( repoId );
-            FileUtils.deleteDirectory( dir );
+            Path dir = getDirectory( repoId );
+            org.apache.archiva.common.utils.FileUtils.deleteDirectory( dir );
         }
         catch ( IOException e )
         {
@@ -866,10 +837,10 @@ public class FileMetadataRepository
         throw new UnsupportedOperationException( "getArtifactsByProperty not yet implemented in File backend" );
     }
 
-    private File getMetadataDirectory( String repoId, String facetId )
+    private Path getMetadataDirectory( String repoId, String facetId )
         throws IOException
     {
-        return new File( getBaseDirectory( repoId ), "facets/" + facetId );
+        return getBaseDirectory( repoId ).resolve( "facets/" + facetId );
     }
 
     private String join( Collection<String> ids )
@@ -905,7 +876,7 @@ public class FileMetadataRepository
             metadata.setId( projectVersion );
             updateProjectVersion( repoId, namespace, projectId, metadata );
 
-            File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+            Path directory = getDirectory( repoId ).resolve( namespace + "/" + projectId + "/" + projectVersion );
 
             Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
 
@@ -944,7 +915,7 @@ public class FileMetadataRepository
         }
     }
 
-    private Properties readOrCreateProperties( File directory, String propertiesKey )
+    private Properties readOrCreateProperties( Path directory, String propertiesKey )
     {
         try
         {
@@ -962,11 +933,11 @@ public class FileMetadataRepository
         return new Properties();
     }
 
-    private Properties readProperties( File directory, String propertiesKey )
+    private Properties readProperties( Path directory, String propertiesKey )
         throws IOException
     {
         Properties properties = new Properties();
-        try (InputStream in = Files.newInputStream( new File( directory, propertiesKey + ".properties" ).toPath() ))
+        try (InputStream in = Files.newInputStream( directory.resolve( propertiesKey + ".properties" )))
         {
 
             properties.load( in );
@@ -980,7 +951,7 @@ public class FileMetadataRepository
     {
         try
         {
-            File directory = new File( getDirectory( repoId ), namespace + "/" + projectId );
+            Path directory = getDirectory( repoId ).resolve( namespace + "/" + projectId );
 
             Properties properties = readOrCreateProperties( directory, PROJECT_METADATA_KEY );
 
@@ -1009,7 +980,7 @@ public class FileMetadataRepository
     {
         try
         {
-            File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+            Path directory = getDirectory( repoId ).resolve( namespace + "/" + projectId + "/" + projectVersion );
 
             Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
             String id = properties.getProperty( "id" );
@@ -1191,7 +1162,7 @@ public class FileMetadataRepository
     {
         try
         {
-            File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+            Path directory = getDirectory( repoId ).resolve( namespace + "/" + projectId + "/" + projectVersion );
 
             Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
 
@@ -1219,7 +1190,7 @@ public class FileMetadataRepository
     {
         try
         {
-            File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
+            Path directory = getDirectory( repoId ).resolve( namespace + "/" + projectId + "/" + projectVersion );
 
             Properties properties = readOrCreateProperties( directory, PROJECT_VERSION_METADATA_KEY );
             int numberOfRefs = Integer.parseInt( properties.getProperty( "ref:lastReferenceNum", "-1" ) ) + 1;
@@ -1256,18 +1227,16 @@ public class FileMetadataRepository
     {
         try
         {
-            List<String> allNamespaces = new ArrayList<>();
-            File directory = getDirectory( repoId );
-            File[] files = directory.listFiles();
-            if ( files != null )
-            {
-                for ( File namespace : files )
-                {
-                    if ( new File( namespace, NAMESPACE_METADATA_KEY + ".properties" ).exists() )
-                    {
-                        allNamespaces.add( namespace.getName() );
-                    }
-                }
+            List<String> allNamespaces;
+            Path directory = getDirectory( repoId );
+            if (!(Files.exists(directory) && Files.isDirectory(directory))) {
+                return Collections.emptyList();
+            }
+            final String searchFile = NAMESPACE_METADATA_KEY + ".properties";
+            try(Stream<Path> fs = Files.list(directory)) {
+                allNamespaces = fs.filter(Files::isDirectory).filter(path ->
+                        Files.exists(path.resolve(searchFile))
+                ).map(path -> path.getFileName().toString()).collect(Collectors.toList());
             }
 
             Set<String> namespaces = new LinkedHashSet<>();
@@ -1301,19 +1270,18 @@ public class FileMetadataRepository
     {
         try
         {
-            List<String> projects = new ArrayList<>();
-            File directory = new File( getDirectory( repoId ), namespace );
-            File[] files = directory.listFiles();
-            if ( files != null )
-            {
-                for ( File project : files )
-                {
-                    if ( new File( project, PROJECT_METADATA_KEY + ".properties" ).exists() )
-                    {
-                        projects.add( project.getName() );
-                    }
-                }
+            List<String> projects;
+            Path directory = getDirectory( repoId ).resolve( namespace );
+            if (!(Files.exists(directory) && Files.isDirectory(directory))) {
+                return Collections.emptyList();
+            }
+            final String searchFile = PROJECT_METADATA_KEY + ".properties";
+            try(Stream<Path> fs = Files.list(directory)) {
+                projects = fs.filter(Files::isDirectory).filter(path ->
+                        Files.exists(path.resolve(searchFile))
+                ).map(path -> path.getFileName().toString()).collect(Collectors.toList());
             }
+
             return projects;
         }
         catch ( IOException e )
@@ -1328,18 +1296,16 @@ public class FileMetadataRepository
     {
         try
         {
-            List<String> projectVersions = new ArrayList<>();
-            File directory = new File( getDirectory( repoId ), namespace + "/" + projectId );
-            File[] files = directory.listFiles();
-            if ( files != null )
-            {
-                for ( File projectVersion : files )
-                {
-                    if ( new File( projectVersion, PROJECT_VERSION_METADATA_KEY + ".properties" ).exists() )
-                    {
-                        projectVersions.add( projectVersion.getName() );
-                    }
-                }
+            List<String> projectVersions;
+            Path directory = getDirectory( repoId ).resolve( namespace + "/" + projectId );
+            if (!(Files.exists(directory) && Files.isDirectory(directory))) {
+                return Collections.emptyList();
+            }
+            final String searchFile = PROJECT_VERSION_METADATA_KEY + ".properties";
+            try(Stream<Path> fs = Files.list(directory)) {
+                projectVersions = fs.filter(Files::isDirectory).filter(path ->
+                        Files.exists(path.resolve(searchFile))
+                ).map(path -> path.getFileName().toString()).collect(Collectors.toList());
             }
             return projectVersions;
         }
@@ -1355,8 +1321,8 @@ public class FileMetadataRepository
     {
         try
         {
-            File directory = new File( getDirectory( repositoryId ), namespace + "/" + projectId );
-            FileUtils.deleteDirectory( directory );
+            Path directory = getDirectory( repositoryId ).resolve( namespace + "/" + projectId );
+            org.apache.archiva.common.utils.FileUtils.deleteDirectory( directory );
         }
         catch ( IOException e )
         {
@@ -1370,8 +1336,8 @@ public class FileMetadataRepository
     {
         try
         {
-            File directory = new File( getDirectory( repoId ), namespace + "/" + projectId + "/" + projectVersion );
-            FileUtils.deleteDirectory( directory );
+            Path directory = getDirectory( repoId ).resolve( namespace + "/" + projectId + "/" + projectVersion );
+            org.apache.archiva.common.utils.FileUtils.deleteDirectory( directory );
         }
         catch ( IOException e )
         {
@@ -1380,11 +1346,11 @@ public class FileMetadataRepository
 
     }
 
-    private void writeProperties( Properties properties, File directory, String propertiesKey )
+    private void writeProperties( Properties properties, Path directory, String propertiesKey )
         throws IOException
     {
-        directory.mkdirs();
-        try (OutputStream os = Files.newOutputStream( new File( directory, propertiesKey + ".properties" ).toPath() ))
+        Files.createDirectories(directory);
+        try (OutputStream os = Files.newOutputStream( directory.resolve( propertiesKey + ".properties" )))
         {
             properties.store( os, null );
         }

http://git-wip-us.apache.org/repos/asf/archiva/blob/a446c038/archiva-modules/plugins/metadata-store-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/metadata-store-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java b/archiva-modules/plugins/metadata-store-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
index aa589f3..346c5c7 100644
--- a/archiva-modules/plugins/metadata-store-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
+++ b/archiva-modules/plugins/metadata-store-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
@@ -19,16 +19,17 @@ package org.apache.archiva.metadata.repository.file;
  * under the License.
  */
 
-import org.apache.archiva.metadata.model.MetadataFacetFactory;
-import org.apache.archiva.metadata.repository.AbstractMetadataRepositoryTest;
-import org.apache.commons.io.FileUtils;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.Configuration;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.metadata.model.MetadataFacetFactory;
+import org.apache.archiva.metadata.repository.AbstractMetadataRepositoryTest;
 import org.junit.Before;
 import org.junit.Ignore;
 
-import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Map;
 
 import static org.mockito.Mockito.mock;
@@ -45,10 +46,10 @@ public class FileMetadataRepositoryTest
     {
         super.setUp();
 
-        File directory = new File( "target/test-repositories" );
-        if (directory.exists())
+        Path directory = Paths.get( "target/test-repositories" );
+        if (Files.exists(directory))
         {
-            FileUtils.deleteDirectory( directory );
+            org.apache.archiva.common.utils.FileUtils.deleteDirectory( directory );
         }
         ArchivaConfiguration config = createTestConfiguration( directory );
         Map<String, MetadataFacetFactory> factories = createTestMetadataFacetFactories();
@@ -152,7 +153,7 @@ public class FileMetadataRepositoryTest
         // TODO not implemented
     }
 
-    protected static ArchivaConfiguration createTestConfiguration( File directory )
+    protected static ArchivaConfiguration createTestConfiguration( Path directory )
     {
         ArchivaConfiguration config = mock( ArchivaConfiguration.class );
         Configuration configData = new Configuration();
@@ -162,11 +163,11 @@ public class FileMetadataRepositoryTest
         return config;
     }
 
-    private static ManagedRepositoryConfiguration createManagedRepository( String repoId, File directory )
+    private static ManagedRepositoryConfiguration createManagedRepository( String repoId, Path directory )
     {
         ManagedRepositoryConfiguration managedRepository = new ManagedRepositoryConfiguration();
         managedRepository.setId( repoId );
-        managedRepository.setLocation( new File( directory, repoId ).getAbsolutePath() );
+        managedRepository.setLocation( directory.resolve( repoId ).toAbsolutePath().toString() );
         return managedRepository;
     }
 }