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 2018/03/24 16:46:30 UTC

[4/4] archiva git commit: Switching repository admin and dependent classes to RepositoryRegistry

Switching repository admin and dependent classes to RepositoryRegistry

RepositoryRegistry is used for indexing context now. There is still more work to do
to move the maven dependent parts into its own projects and update the dependencies.


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

Branch: refs/heads/master
Commit: c544376afbec84689eae8ca5cc1a8f6a0ddb768d
Parents: e2eb9fe
Author: Martin Stockhammer <ma...@ars.de>
Authored: Sat Mar 24 17:41:50 2018 +0100
Committer: Martin Stockhammer <ma...@ars.de>
Committed: Sat Mar 24 17:44:13 2018 +0100

----------------------------------------------------------------------
 .../DefaultArchivaConfiguration.java            |   1 +
 .../src/test/java/RepositoryProviderMock.java   |   4 +
 .../resourcesstatic/archetype-resources/pom.xml |   6 +
 .../archiva-core-consumers/pom.xml              |   5 +
 .../repository/AbstractRepositoryPurgeTest.java |   2 -
 ...nupReleasedSnapshotsRepositoryPurgeTest.java |   6 +-
 .../repository/mock/RepositoryProviderMock.java |  17 +-
 ...pring-context-cleanup-released-snapshots.xml |   2 +-
 .../archiva-lucene-consumers/pom.xml            |   5 +
 .../consumers/lucene/NexusIndexerConsumer.java  |  43 +-
 .../lucene/NexusIndexerConsumerTest.java        |  16 +-
 .../src/test/resources/spring-context.xml       |   2 +-
 .../archiva-base/archiva-maven2-indexer/pom.xml |  24 +
 .../indexer/maven/MavenIndexContext.java        |  13 +-
 .../indexer/maven/MavenIndexManager.java        | 152 ++--
 .../maven/search/MavenRepositorySearch.java     | 106 +--
 .../indexer/maven/MavenIndexManagerTest.java    |   6 +
 .../search/AbstractMavenRepositorySearch.java   |  89 ++-
 .../search/MavenRepositorySearchOSGITest.java   |  13 +
 .../MavenRepositorySearchPaginateTest.java      |  20 +-
 .../maven/search/MavenRepositorySearchTest.java |  50 +-
 .../src/test/resources/log4j2-test.xml          |  45 ++
 .../src/test/resources/spring-context.xml       |   2 +-
 .../archiva-base/archiva-proxy/pom.xml          |   5 +
 .../MockRepositoryArchivaTaskScheduler.java     |   2 +-
 .../archiva/proxy/AbstractProxyTestCase.java    |   6 +-
 .../repository/mock/RepositoryProviderMock.java |  19 +-
 .../src/test/resources/spring-context.xml       |   1 +
 .../model/managed/ManagedRepositoryAdmin.java   |  12 +-
 .../managed/DefaultManagedRepositoryAdmin.java  | 293 ++-----
 .../DefaultProxyConnectorAdmin.java             |  10 +-
 .../remote/DefaultRemoteRepositoryAdmin.java    |  13 +-
 .../admin/mock/ArchivaIndexManagerMock.java     | 777 ++++++++++++++++++
 .../admin/mock/MavenIndexContextMock.java       | 136 ++++
 .../group/RepositoryGroupAdminTest.java         |  26 +-
 .../src/test/resources/default-archiva.xml      |   1 +
 .../archiva/indexer/ArchivaIndexManager.java    |  20 +
 .../archiva/indexer/GenericIndexManager.java    |  12 +
 .../archiva/repository/EditableRepository.java  |   8 +
 .../apache/archiva/repository/Repository.java   |   9 +-
 .../archiva/repository/RepositoryEvent.java     |  69 ++
 .../repository/RepositoryEventHandler.java      |  32 +
 .../repository/RepositoryEventListener.java     |  28 +
 .../archiva/repository/RepositoryProvider.java  |   2 +-
 .../archiva/repository/AbstractRepository.java  |  70 +-
 .../repository/BasicManagedRepository.java      |   7 +-
 .../repository/BasicRemoteRepository.java       |  12 +-
 .../archiva/repository/RepositoryRegistry.java  | 163 +++-
 .../repository/features/AbstractFeature.java    |  66 ++
 .../repository/features/IndexCreationEvent.java |  35 +
 .../features/IndexCreationFeature.java          |  19 +-
 .../mock/ArchivaIndexManagerMock.java           |  85 ++
 .../repository/mock/RepositoryProviderMock.java |  17 +-
 .../archiva-scheduler-indexing/pom.xml          |   6 +
 .../indexing/ArchivaIndexingTaskExecutor.java   |  18 +-
 .../indexing/ArtifactIndexingTask.java          |  12 +-
 .../DefaultDownloadRemoteIndexScheduler.java    |  21 +-
 .../ArchivaIndexingTaskExecutorTest.java        |  57 +-
 .../indexing/DownloadRemoteIndexTaskTest.java   |  44 +-
 .../src/test/resources/spring-context.xml       |   2 +-
 .../mock/MockManagedRepositoryAdmin.java        |  11 -
 .../archiva-rest/archiva-rest-services/pom.xml  |   3 +
 .../services/DefaultRepositoriesService.java    |   3 +-
 .../rest/services/AbstractArchivaRestTest.java  |   2 +-
 .../src/test/resources/log4j2-test.xml          |  16 +-
 .../archiva-web/archiva-security/pom.xml        |   5 +
 .../archiva/security/AbstractSecurityTest.java  |   6 +-
 .../security/DefaultUserRepositoriesTest.java   |   2 +-
 .../archiva-web/archiva-web-common/pom.xml      |   3 +
 .../archiva-web/archiva-webdav/pom.xml          |   1 +
 .../AbstractRepositoryServletTestCase.java      |   2 -
 .../webdav/RepositoryServletBrowseTest.java     |   2 +-
 .../storage/maven2/Maven2RepositoryStorage.java |  36 +-
 .../storage/maven2/RepositoryModelResolver.java |  33 +-
 .../maven2/MavenManagedRepository.java          |   7 +-
 .../maven2/MavenRemoteRepository.java           |  14 +-
 .../maven2/MavenRepositoryProvider.java         |  20 +-
 .../archiva/configuration/MockRepoAdmin.java    |  13 +-
 .../configuration/TestConfiguration.java        |   7 +-
 ...oryMetadataResolverMRM1411RepoGroupTest.java |  29 +-
 ...n2RepositoryMetadataResolverMRM1411Test.java |   7 +
 ...itoryMetadataResolverManagedReleaseTest.java |   6 +
 ...toryMetadataResolverManagedSnapshotTest.java |   6 +
 .../Maven2RepositoryMetadataResolverTest.java   |  13 +-
 .../repository/storage/maven2/MockWagon.java    |   2 +-
 .../index/mock/ArchivaIndexManagerMock.java     | 780 +++++++++++++++++++
 .../index/mock/MavenIndexContextMock.java       | 136 ++++
 .../src/test/resources/spring-context.xml       |   2 +-
 88 files changed, 3232 insertions(+), 679 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
index 71b4c31..caedee3 100644
--- a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
@@ -644,6 +644,7 @@ public class DefaultArchivaConfiguration
 
 
         this.configuration = unescapeExpressions( configuration );
+        isConfigurationDefaulted=false;
 
         triggerEvent( ConfigurationEvent.SAVED );
     }

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/RepositoryProviderMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/RepositoryProviderMock.java b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/RepositoryProviderMock.java
index a140842..ec13f21 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/RepositoryProviderMock.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/RepositoryProviderMock.java
@@ -230,4 +230,8 @@ public class RepositoryProviderMock implements RepositoryProvider
         return configuration;
     }
 
+    @Override
+    public <T> void raise(org.apache.archiva.repository.RepositoryEvent<T> event) {
+
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resourcesstatic/archetype-resources/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resourcesstatic/archetype-resources/pom.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resourcesstatic/archetype-resources/pom.xml
index bb98a2d..2217e8e 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resourcesstatic/archetype-resources/pom.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resourcesstatic/archetype-resources/pom.xml
@@ -79,6 +79,12 @@
       <scope>test</scope>
     </dependency>
     <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-maven2-indexer</artifactId>
+      <version>${archiva.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>org.apache.archiva.redback.components.registry</groupId>
       <artifactId>spring-registry-api</artifactId>
       <version>${redback.registry.version}</version>

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
index c01a30b..3bfca11 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
@@ -155,6 +155,11 @@
       <artifactId>archiva-mock</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-maven2-indexer</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <pluginManagement>

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java
index e9e7353..345d257 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java
@@ -19,7 +19,6 @@ package org.apache.archiva.consumers.core.repository;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.RepositorySession;
@@ -54,7 +53,6 @@ import java.nio.file.Paths;
 import java.time.Period;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Locale;
 import java.util.stream.Collectors;
 
 import static org.junit.Assert.assertFalse;

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
index a289734..1ef4bf9 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
@@ -107,7 +107,7 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
     {
         RepositoryRegistry repositoryRegistry = applicationContext.getBean( RepositoryRegistry.class );
         ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( TEST_REPO_ID );
-        repositoryRegistry.removeRepository( managedRepository );
+        repositoryRegistry.removeRepository( TEST_REPO_ID );
         repositoryRegistry.putRepository(
             getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ));
 
@@ -217,7 +217,7 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
 
         RepositoryRegistry repositoryRegistry = applicationContext.getBean(RepositoryRegistry.class);
         ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( TEST_REPO_ID );
-        repositoryRegistry.removeRepository( managedRepository );
+        repositoryRegistry.removeRepository( TEST_REPO_ID );
         repositoryRegistry.putRepository(
             getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ));
 
@@ -298,7 +298,7 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
 
         RepositoryRegistry repositoryRegistry = applicationContext.getBean(RepositoryRegistry.class);
         ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( TEST_REPO_ID );
-        repositoryRegistry.removeRepository( managedRepository );
+        repositoryRegistry.removeRepository( TEST_REPO_ID );
         repositoryRegistry.putRepository(
             getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ));
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
index 286dd38..4af39c3 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
@@ -21,18 +21,7 @@ package org.apache.archiva.repository.mock;
 
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.repository.BasicManagedRepository;
-import org.apache.archiva.repository.BasicRemoteRepository;
-import org.apache.archiva.repository.EditableManagedRepository;
-import org.apache.archiva.repository.EditableRemoteRepository;
-import org.apache.archiva.repository.ManagedRepository;
-import org.apache.archiva.repository.PasswordCredentials;
-import org.apache.archiva.repository.ReleaseScheme;
-import org.apache.archiva.repository.RemoteRepository;
-import org.apache.archiva.repository.RepositoryCredentials;
-import org.apache.archiva.repository.RepositoryException;
-import org.apache.archiva.repository.RepositoryProvider;
-import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.*;
 import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
@@ -229,4 +218,8 @@ public class RepositoryProviderMock implements RepositoryProvider
         return configuration;
     }
 
+    @Override
+    public <T> void raise(RepositoryEvent<T> event) {
+
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context-cleanup-released-snapshots.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context-cleanup-released-snapshots.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context-cleanup-released-snapshots.xml
index 5119c55..ddc8bff 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context-cleanup-released-snapshots.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context-cleanup-released-snapshots.xml
@@ -32,7 +32,7 @@
   </bean>
   <alias name="archivaConfiguration#cleanup-released-snapshots" alias="archivaConfiguration"/>
   <alias name="archivaConfiguration#cleanup-released-snapshots" alias="archivaConfiguration#default"/>
-  <context:component-scan base-package="org.apache.archiva.configuration,org.apache.archiva.repository.content.maven2"/>
+  <context:component-scan base-package="org.apache.archiva.configuration,org.apache.archiva.repository.content.maven2,org.apache.archiva.indexer.maven"/>
 
   <alias name="repositoryContentFactory#cleanup-released-snapshots" alias="repositoryContentFactory#default" />
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/pom.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/pom.xml
index 2088251..bb489a2 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/pom.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/pom.xml
@@ -136,6 +136,11 @@
       <artifactId>xercesImpl</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-maven2-indexer</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <plugins>

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java
index 50dd8c1..6cadd27 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java
@@ -28,11 +28,13 @@ import org.apache.archiva.configuration.FileTypes;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
+import org.apache.archiva.indexer.UnsupportedBaseContextException;
 import org.apache.archiva.redback.components.registry.Registry;
 import org.apache.archiva.redback.components.registry.RegistryListener;
 import org.apache.archiva.redback.components.taskqueue.TaskQueueException;
 import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.RepositoryType;
 import org.apache.archiva.scheduler.ArchivaTaskScheduler;
 import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask;
 import org.apache.maven.index.NexusIndexer;
@@ -124,11 +126,14 @@ public class NexusIndexerConsumer
         try
         {
             log.info( "Creating indexing context for repo : {}", repository.getId() );
-            indexingContext = managedRepositoryAdmin.createIndexContext( repository );
-        }
-        catch ( RepositoryAdminException e )
-        {
-            throw new ConsumerException( e.getMessage(), e );
+            if (repository.getType()== RepositoryType.MAVEN) {
+                indexingContext = repository.getIndexingContext().getBaseContext(IndexingContext.class);
+            } else  {
+                indexingContext= null;
+            }
+        } catch (UnsupportedBaseContextException e) {
+            log.error("Bad repository type. Not nexus indexer compatible.");
+            throw new ConsumerException("Bad repository type "+repository.getType());
         }
     }
 
@@ -154,7 +159,7 @@ public class NexusIndexerConsumer
         Path artifactFile = managedRepository.resolve(path);
 
         ArtifactIndexingTask task =
-            new ArtifactIndexingTask( repository, artifactFile, ArtifactIndexingTask.Action.ADD, getIndexingContext() );
+            new ArtifactIndexingTask( repository, artifactFile, ArtifactIndexingTask.Action.ADD, repository.getIndexingContext() );
         try
         {
             log.debug( "Queueing indexing task '{}' to add or update the artifact in the index.", task );
@@ -181,7 +186,7 @@ public class NexusIndexerConsumer
             // specify in indexing task that this is not a repo scan request!
             ArtifactIndexingTask task =
                 new ArtifactIndexingTask( repository, artifactFile, ArtifactIndexingTask.Action.ADD,
-                                          getIndexingContext(), false );
+                                          repository.getIndexingContext(), false );
             // only update index we don't need to scan the full repo here
             task.setOnlyUpdate( true );
             try
@@ -199,21 +204,8 @@ public class NexusIndexerConsumer
     @Override
     public void completeScan()
     {
-        IndexingContext context = this.indexingContext;
-        if ( context == null )
-        {
-            try
-            {
-                context = getIndexingContext();
-            }
-            catch ( ConsumerException e )
-            {
-                log.warn( "failed to get an IndexingContext:{}", e.getMessage() );
-                return;
-            }
-        }
         ArtifactIndexingTask task =
-            new ArtifactIndexingTask( repository, null, ArtifactIndexingTask.Action.FINISH, context );
+            new ArtifactIndexingTask( repository, null, ArtifactIndexingTask.Action.FINISH, repository.getIndexingContext());
         try
         {
             log.debug( "Queueing indexing task '{}' to finish indexing.", task );
@@ -292,11 +284,10 @@ public class NexusIndexerConsumer
         {
             try
             {
-                indexingContext = managedRepositoryAdmin.createIndexContext( repository );
-            }
-            catch ( RepositoryAdminException e )
-            {
-                throw new ConsumerException( e.getMessage(), e );
+                indexingContext = repository.getIndexingContext().getBaseContext(IndexingContext.class);
+            } catch (UnsupportedBaseContextException e) {
+                log.error("Bad repository type. Not nexus indexer compatible. "+repository.getType());
+                throw new ConsumerException("Bad repository type "+repository.getType());
             }
         }
         return indexingContext;

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumerTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumerTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumerTest.java
index e34dc7e..2efebfb 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumerTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumerTest.java
@@ -26,14 +26,13 @@ import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.FileTypes;
 import org.apache.archiva.redback.components.taskqueue.TaskQueueException;
 import org.apache.archiva.repository.BasicManagedRepository;
-import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.scheduler.ArchivaTaskScheduler;
 import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.maven.index.NexusIndexer;
 import org.apache.maven.index.context.IndexCreator;
-import org.apache.regexp.RE;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -47,12 +46,7 @@ import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
+import java.util.*;
 
 /**
  * NexusIndexerConsumerTest
@@ -111,6 +105,9 @@ public class NexusIndexerConsumerTest
     @Inject
     private ManagedRepositoryAdmin managedRepositoryAdmin;
 
+    @Inject
+    RepositoryRegistry repositoryRegistry;
+
 
     @Override
     @Before
@@ -138,6 +135,7 @@ public class NexusIndexerConsumerTest
         repositoryConfig.setScanned( true );
         repositoryConfig.addActiveReleaseScheme( ReleaseScheme.RELEASE );
         repositoryConfig.removeActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
+        repositoryRegistry.putRepository(repositoryConfig);
     }
 
 
@@ -156,6 +154,8 @@ public class NexusIndexerConsumerTest
         org.apache.archiva.common.utils.FileUtils.deleteDirectory( indexDir );
         assertFalse( Files.exists(indexDir) );
 
+        repositoryRegistry.destroy();
+
         super.tearDown();
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/resources/spring-context.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/resources/spring-context.xml
index a891372..ebf3181 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/resources/spring-context.xml
@@ -28,7 +28,7 @@
            http://www.springframework.org/schema/context/spring-context-3.0.xsd"
        default-lazy-init="true">
   <context:annotation-config/>
-  <context:component-scan base-package="org.apache.archiva.consumers.lucene.test"/>
+  <context:component-scan base-package="org.apache.archiva.consumers.lucene.test,org.apache.maven.index"/>
 
   <bean name="commons-configuration" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">
     <property name="properties">

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/pom.xml b/archiva-modules/archiva-base/archiva-maven2-indexer/pom.xml
index e51f824..2a2e1c4 100644
--- a/archiva-modules/archiva-base/archiva-maven2-indexer/pom.xml
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/pom.xml
@@ -56,6 +56,11 @@
     </dependency>
 
     <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
     </dependency>
@@ -142,6 +147,12 @@
       <artifactId>archiva-test-utils</artifactId>
       <version>${project.version}</version>
       <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-simple</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.apache.derby</groupId>
@@ -216,6 +227,19 @@
         </exclusion>
       </exclusions>
     </dependency>
+
+
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-jcl</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexContext.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexContext.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexContext.java
index 4ee8079..37f602f 100644
--- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexContext.java
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexContext.java
@@ -26,6 +26,7 @@ import org.apache.maven.index.context.IndexingContext;
 import java.io.IOException;
 import java.net.URI;
 import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
 import java.sql.Date;
 import java.time.ZonedDateTime;
 import java.util.Set;
@@ -81,12 +82,20 @@ public class MavenIndexContext implements ArchivaIndexingContext {
 
     @Override
     public void close(boolean deleteFiles) throws IOException {
-        delegate.close(deleteFiles);
+        try {
+            delegate.close(deleteFiles);
+        } catch (NoSuchFileException e) {
+            // Ignore missing directory
+        }
     }
 
     @Override
     public void close() throws IOException {
-        delegate.close(false);
+        try {
+            delegate.close(false);
+        } catch (NoSuchFileException e) {
+            // Ignore missing directory
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexManager.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexManager.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexManager.java
index 00e67e4..51a5f70 100644
--- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexManager.java
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexManager.java
@@ -22,6 +22,7 @@ package org.apache.archiva.indexer.maven;
 import org.apache.archiva.admin.model.RepositoryAdminException;
 import org.apache.archiva.admin.model.beans.NetworkProxy;
 import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
+import org.apache.archiva.common.utils.FileUtils;
 import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.indexer.ArchivaIndexManager;
@@ -32,12 +33,7 @@ import org.apache.archiva.indexer.UnsupportedBaseContextException;
 import org.apache.archiva.proxy.common.WagonFactory;
 import org.apache.archiva.proxy.common.WagonFactoryException;
 import org.apache.archiva.proxy.common.WagonFactoryRequest;
-import org.apache.archiva.repository.ManagedRepository;
-import org.apache.archiva.repository.PasswordCredentials;
-import org.apache.archiva.repository.RemoteRepository;
-import org.apache.archiva.repository.Repository;
-import org.apache.archiva.repository.RepositoryType;
-import org.apache.archiva.repository.UnsupportedRepositoryTypeException;
+import org.apache.archiva.repository.*;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.commons.lang.StringUtils;
@@ -425,7 +421,7 @@ public class MavenIndexManager implements ArchivaIndexManager
     @Override
     public ArchivaIndexingContext createContext( Repository repository ) throws IndexCreationFailedException
     {
-
+        log.debug("Creating context for repo {}, type: {}", repository.getId(), repository.getType());
         if ( repository.getType( ) != RepositoryType.MAVEN )
         {
             throw new UnsupportedRepositoryTypeException( repository.getType( ) );
@@ -449,44 +445,120 @@ public class MavenIndexManager implements ArchivaIndexManager
                 + ( StringUtils.isNotEmpty( e.getMessage( ) ) ? ": " + e.getMessage( ) : "" ), e );
         }
         MavenIndexContext context = new MavenIndexContext( repository, mvnCtx );
+
         return context;
     }
 
-    private IndexingContext createRemoteContext( RemoteRepository remoteRepository ) throws IOException
+    @Override
+    public ArchivaIndexingContext reset(ArchivaIndexingContext context) throws IndexUpdateFailedException {
+        ArchivaIndexingContext ctx;
+        executeUpdateFunction(context, indexingContext -> {
+            try {
+                indexingContext.close(true);
+            } catch (IOException e) {
+                log.warn("Index close failed");
+            }
+            try {
+                FileUtils.deleteDirectory(Paths.get(context.getPath()));
+            } catch (IOException e) {
+                throw new IndexUpdateFailedException("Could not delete index files");
+            }
+        });
+        try {
+            Repository repo = context.getRepository();
+            ctx = createContext(context.getRepository());
+            if (repo instanceof EditableRepository) {
+                ((EditableRepository)repo).setIndexingContext(ctx);
+            }
+        } catch (IndexCreationFailedException e) {
+            throw new IndexUpdateFailedException("Could not create index");
+        }
+        return ctx;
+    }
+
+    @Override
+    public ArchivaIndexingContext move(ArchivaIndexingContext context, Repository repo) throws IndexCreationFailedException {
+        if (context==null) {
+            return null;
+        }
+        if (context.supports(IndexingContext.class)) {
+            try {
+                Path newPath = getIndexPath(repo);
+                IndexingContext ctx = context.getBaseContext(IndexingContext.class);
+                Path oldPath = ctx.getIndexDirectoryFile().toPath();
+                if (oldPath.equals(newPath)) {
+                    // Nothing to do, if path does not change
+                    return context;
+                }
+                if (!Files.exists(oldPath)) {
+                    return createContext(repo);
+                } else if (context.isEmpty()) {
+                    context.close();
+                    return createContext(repo);
+                } else {
+                    context.close(false);
+                    Files.move(oldPath, newPath);
+                    return createContext(repo);
+                }
+            } catch (IOException e) {
+                log.error("IOException while moving index directory {}", e.getMessage(), e);
+                throw new IndexCreationFailedException("Could not recreated the index.", e);
+            } catch (UnsupportedBaseContextException e) {
+                throw new IndexCreationFailedException("The given context, is not a maven context.");
+            }
+        } else {
+            throw new IndexCreationFailedException("Bad context type. This is not a maven context.");
+        }
+    }
+
+    private Path getIndexPath(Repository repo) throws IOException {
+        IndexCreationFeature icf = repo.getFeature(IndexCreationFeature.class).get();
+        Path repoDir = repo.getLocalPath();
+        URI indexDir = icf.getIndexPath();
+        Path indexDirectory = null;
+        if ( ! StringUtils.isEmpty(indexDir.toString( ) ) )
+        {
+
+            indexDirectory = PathUtil.getPathFromUri( indexDir );
+            // not absolute so create it in repository directory
+            if ( !indexDirectory.isAbsolute( ) )
+            {
+                indexDirectory = repoDir.resolve( indexDirectory );
+            }
+        }
+        else
+        {
+            indexDirectory = repoDir.resolve( ".index" );
+        }
+
+        if ( !Files.exists( indexDirectory ) )
+        {
+            Files.createDirectories( indexDirectory );
+        }
+        return indexDirectory;
+    }
+
+    private IndexingContext createRemoteContext(RemoteRepository remoteRepository ) throws IOException
     {
         Path appServerBase = archivaConfiguration.getAppServerBaseDir( );
 
         String contextKey = "remote-" + remoteRepository.getId( );
 
+
         // create remote repository path
-        Path repoDir = appServerBase.resolve( "data" ).resolve( "remotes" ).resolve( remoteRepository.getId( ) );
+        Path repoDir = remoteRepository.getLocalPath();
         if ( !Files.exists( repoDir ) )
         {
             Files.createDirectories( repoDir );
         }
 
-        Path indexDirectory;
+        Path indexDirectory = null;
 
         // is there configured indexDirectory ?
         if ( remoteRepository.supportsFeature( RemoteIndexFeature.class ) )
         {
             RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
-            indexDirectory = PathUtil.getPathFromUri( rif.getIndexUri( ) );
-            if ( !indexDirectory.isAbsolute( ) )
-            {
-                indexDirectory = repoDir.resolve( indexDirectory );
-            }
-
-            // if not configured use a default value
-            if ( indexDirectory == null )
-            {
-                indexDirectory = repoDir.resolve( ".index" );
-            }
-            if ( !Files.exists( indexDirectory ) )
-            {
-                Files.createDirectories( indexDirectory );
-            }
-
+            indexDirectory = getIndexPath(remoteRepository);
             String remoteIndexUrl = calculateIndexRemoteUrl( remoteRepository.getLocation( ), rif );
             try
             {
@@ -538,35 +610,11 @@ public class MavenIndexManager implements ArchivaIndexManager
             }
         }
 
+        Path indexDirectory = null;
 
         if ( repository.supportsFeature( IndexCreationFeature.class ) )
         {
-            IndexCreationFeature icf = repository.getFeature( IndexCreationFeature.class ).get( );
-            URI indexDir = icf.getIndexPath( );
-            //File managedRepository = new File( repository.getLocation() );
-
-            Path indexDirectory = null;
-            if ( indexDir != null && !"".equals( indexDir.toString( ) ) )
-            {
-
-                indexDirectory = PathUtil.getPathFromUri( indexDir );
-                // not absolute so create it in repository directory
-                if ( !indexDirectory.isAbsolute( ) )
-                {
-                    indexDirectory = repositoryDirectory.resolve( indexDirectory );
-                }
-                icf.setIndexPath( indexDirectory.normalize( ).toUri( ) );
-            }
-            else
-            {
-                indexDirectory = repositoryDirectory.resolve( ".indexer" );
-                icf.setIndexPath( indexDirectory.toUri( ) );
-            }
-
-            if ( !Files.exists( indexDirectory ) )
-            {
-                Files.createDirectories( indexDirectory );
-            }
+            indexDirectory = getIndexPath(repository);
 
             String indexUrl = repositoryDirectory.toUri( ).toURL( ).toExternalForm( );
             try

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearch.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearch.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearch.java
index 590cdd2..c861a9b 100644
--- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearch.java
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearch.java
@@ -20,24 +20,20 @@ package org.apache.archiva.indexer.maven.search;
  */
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.admin.model.proxyconnector.ProxyConnectorAdmin;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
+import org.apache.archiva.indexer.UnsupportedBaseContextException;
+import org.apache.archiva.indexer.search.ArtifactInfoFilter;
 import org.apache.archiva.indexer.search.*;
 import org.apache.archiva.indexer.util.SearchUtil;
 import org.apache.archiva.model.ArchivaArtifactModel;
-import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.Repository;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.RepositoryType;
 import org.apache.commons.lang.StringUtils;
-import org.apache.maven.index.ArtifactInfo;
-import org.apache.maven.index.FlatSearchRequest;
-import org.apache.maven.index.FlatSearchResponse;
-import org.apache.maven.index.MAVEN;
-import org.apache.maven.index.NexusIndexer;
-import org.apache.maven.index.OSGI;
-import org.apache.maven.index.QueryCreator;
-import org.apache.maven.index.SearchType;
+import org.apache.maven.index.*;
 import org.apache.maven.index.context.IndexingContext;
 import org.apache.maven.index.expr.SearchExpression;
 import org.apache.maven.index.expr.SearchTyped;
@@ -52,13 +48,7 @@ import org.springframework.stereotype.Service;
 
 import javax.inject.Inject;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 /**
  * RepositorySearch implementation which uses the Maven Indexer for searching.
@@ -69,11 +59,12 @@ public class MavenRepositorySearch
 {
     private Logger log = LoggerFactory.getLogger( getClass() );
 
-    private NexusIndexer indexer;
+    private Indexer indexer;
 
     private QueryCreator queryCreator;
 
-    private ManagedRepositoryAdmin managedRepositoryAdmin;
+
+    RepositoryRegistry repositoryRegistry;
 
     private ProxyConnectorAdmin proxyConnectorAdmin;
 
@@ -83,13 +74,14 @@ public class MavenRepositorySearch
     }
 
     @Inject
-    public MavenRepositorySearch( NexusIndexer nexusIndexer, ManagedRepositoryAdmin managedRepositoryAdmin,
+    public MavenRepositorySearch( Indexer nexusIndexer, RepositoryRegistry repositoryRegistry,
+
                                   ProxyConnectorAdmin proxyConnectorAdmin, QueryCreator queryCreator )
         throws PlexusSisuBridgeException
     {
         this.indexer = nexusIndexer;
         this.queryCreator = queryCreator;
-        this.managedRepositoryAdmin = managedRepositoryAdmin;
+        this.repositoryRegistry = repositoryRegistry;
         this.proxyConnectorAdmin = proxyConnectorAdmin;
     }
 
@@ -335,13 +327,36 @@ public class MavenRepositorySearch
 
     }
 
+    private IndexingContext getIndexingContext(String id) {
+        String repoId;
+        if (StringUtils.startsWith(id, "remote-")) {
+            repoId = StringUtils.substringAfter(id, "remote-");
+        } else {
+            repoId = id;
+        }
+        Repository repo = repositoryRegistry.getRepository(repoId);
+        if (repo==null) {
+            return null;
+        } else {
+            if (repo.getIndexingContext()!=null) {
+                try {
+                    return repo.getIndexingContext().getBaseContext(IndexingContext.class);
+                } catch (UnsupportedBaseContextException e) {
+                    return null;
+                }
+            } else {
+                return null;
+            }
+        }
+    }
+
     private List<IndexingContext> getIndexingContexts( List<String> ids )
     {
         List<IndexingContext> contexts = new ArrayList<>( ids.size() );
 
         for ( String id : ids )
         {
-            IndexingContext context = indexer.getIndexingContexts().get( id );
+            IndexingContext context = getIndexingContext(id);
             if ( context != null )
             {
                 contexts.add( context );
@@ -382,20 +397,20 @@ public class MavenRepositorySearch
         {
             try
             {
-                ManagedRepository repoConfig = managedRepositoryAdmin.getManagedRepository( repo );
+                Repository rRepo = repositoryRegistry.getRepository(repo);
 
-                if ( repoConfig != null )
+                if ( rRepo != null )
                 {
 
-                    IndexingContext context = managedRepositoryAdmin.createIndexContext( repoConfig );
-                    if ( context.isSearchable() )
-                    {
-                        indexingContextIds.addAll( getRemoteIndexingContextIds( repo ) );
-                        indexingContextIds.add( context.getId() );
-                    }
-                    else
-                    {
-                        log.warn( "indexingContext with id {} not searchable", repoConfig.getId() );
+                    if (rRepo.getType().equals(RepositoryType.MAVEN)) {
+                        assert rRepo.getIndexingContext() != null;
+                        IndexingContext context = rRepo.getIndexingContext().getBaseContext(IndexingContext.class);
+                        if (context.isSearchable()) {
+                            indexingContextIds.addAll(getRemoteIndexingContextIds(repo));
+                            indexingContextIds.add(context.getId());
+                        } else {
+                            log.warn("indexingContext with id {} not searchable", rRepo.getId());
+                        }
                     }
 
                 }
@@ -404,17 +419,14 @@ public class MavenRepositorySearch
                     log.warn( "Repository '{}' not found in configuration.", repo );
                 }
             }
-            catch ( RepositoryAdminException e )
-            {
-                log.warn( "RepositoryAdminException occured while accessing index of repository '{}' : {}", repo,
-                          e.getMessage() );
-                continue;
-            }
             catch ( RepositorySearchException e )
             {
                 log.warn( "RepositorySearchException occured while accessing index of repository '{}' : {}", repo,
                     e.getMessage() );
                 continue;
+            } catch (UnsupportedBaseContextException e) {
+                log.error("Fatal situation: Maven repository without IndexingContext found.");
+                continue;
             }
         }
 
@@ -446,10 +458,16 @@ public class MavenRepositorySearch
         for ( ProxyConnector proxyConnector : proxyConnectors )
         {
             String remoteId = "remote-" + proxyConnector.getTargetRepoId();
-            IndexingContext context = indexer.getIndexingContexts().get( remoteId );
-            if ( context != null && context.isSearchable() )
-            {
-                ids.add( remoteId );
+            RemoteRepository repo = repositoryRegistry.getRemoteRepository(proxyConnector.getTargetRepoId());
+            if (repo.getType()==RepositoryType.MAVEN) {
+                try {
+                    IndexingContext context = repo.getIndexingContext() != null ? repo.getIndexingContext().getBaseContext(IndexingContext.class) : null;
+                    if (context!=null && context.isSearchable()) {
+                        ids.add(remoteId);
+                    }
+                } catch (UnsupportedBaseContextException e) {
+                    // Ignore this one
+                }
             }
         }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java
index 53cdaad..32e3b6f 100644
--- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java
@@ -22,6 +22,7 @@ package org.apache.archiva.indexer.maven;
 import org.apache.archiva.common.utils.FileUtils;
 import org.apache.archiva.indexer.ArchivaIndexingContext;
 import org.apache.archiva.indexer.IndexCreationFailedException;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.RepositoryType;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
@@ -58,6 +59,10 @@ import static org.junit.Assert.*;
 @ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
 public class MavenIndexManagerTest {
 
+    @Inject
+    RepositoryRegistry repositoryRegistry;
+
+
     private Path indexPath;
     private MavenManagedRepository repository;
     private ArchivaIndexingContext ctx;
@@ -72,6 +77,7 @@ public class MavenIndexManagerTest {
 
     @After
     public void tearDown() {
+        repositoryRegistry.destroy();
         if (ctx!=null) {
             try {
                 ctx.close(true);

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/AbstractMavenRepositorySearch.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/AbstractMavenRepositorySearch.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/AbstractMavenRepositorySearch.java
index 07fcc09..e5171d2 100644
--- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/AbstractMavenRepositorySearch.java
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/AbstractMavenRepositorySearch.java
@@ -28,18 +28,14 @@ import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.Configuration;
 import org.apache.archiva.configuration.ConfigurationListener;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.indexer.maven.search.MavenRepositorySearch;
 import org.apache.archiva.indexer.search.SearchResultHit;
 import org.apache.archiva.indexer.search.SearchResults;
+import org.apache.archiva.repository.Repository;
 import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.commons.lang.SystemUtils;
-import org.apache.maven.index.ArtifactContext;
-import org.apache.maven.index.ArtifactContextProducer;
-import org.apache.maven.index.ArtifactScanningListener;
-import org.apache.maven.index.NexusIndexer;
-import org.apache.maven.index.QueryCreator;
-import org.apache.maven.index.ScanningResult;
+import org.apache.maven.index.*;
 import org.apache.maven.index.context.IndexCreator;
 import org.apache.maven.index.context.IndexingContext;
 import org.easymock.EasyMock;
@@ -87,6 +83,9 @@ public abstract class AbstractMavenRepositorySearch
     @Inject
     RepositoryRegistry repositoryRegistry;
 
+    @Inject
+    private IndexerEngine indexerEngine;
+
     IMocksControl archivaConfigControl;
 
     Configuration config;
@@ -98,7 +97,10 @@ public abstract class AbstractMavenRepositorySearch
     List<IndexCreator> indexCreators;
 
     @Inject
-    NexusIndexer nexusIndexer;
+    Indexer indexer;
+
+    @Inject
+    Scanner scanner;
 
     @Inject
     QueryCreator queryCreator;
@@ -127,11 +129,9 @@ public abstract class AbstractMavenRepositorySearch
         defaultProxyConnectorAdmin.setArchivaConfiguration( archivaConfig );
         repositoryRegistry.setArchivaConfiguration( archivaConfig );
 
-        search = new MavenRepositorySearch( nexusIndexer, defaultManagedRepositoryAdmin, defaultProxyConnectorAdmin,
+        search = new MavenRepositorySearch( indexer, repositoryRegistry, defaultProxyConnectorAdmin,
                                             queryCreator );
 
-        defaultManagedRepositoryAdmin.setIndexer( nexusIndexer );
-        defaultManagedRepositoryAdmin.setIndexCreators( indexCreators );
         assertNotNull( repositoryRegistry );
         defaultManagedRepositoryAdmin.setRepositoryRegistry( repositoryRegistry );
 
@@ -144,6 +144,8 @@ public abstract class AbstractMavenRepositorySearch
         archivaConfig.addListener( EasyMock.anyObject( ConfigurationListener.class ) );
         EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
         EasyMock.expect( archivaConfig.getConfiguration() ).andReturn(config).anyTimes();
+        archivaConfig.save(EasyMock.anyObject(Configuration.class));
+        EasyMock.expectLastCall().anyTimes();
         archivaConfigControl.replay();
         repositoryRegistry.reload();
         archivaConfigControl.reset();
@@ -154,11 +156,16 @@ public abstract class AbstractMavenRepositorySearch
     public void tearDown()
         throws Exception
     {
-        for ( IndexingContext indexingContext : nexusIndexer.getIndexingContexts().values() )
-        {
-            nexusIndexer.removeIndexingContext( indexingContext, true );
-        }
-
+        archivaConfigControl.reset();
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn(config).anyTimes();
+        archivaConfig.save(EasyMock.anyObject(Configuration.class));
+        EasyMock.expectLastCall().anyTimes();
+        archivaConfigControl.replay();
+        repositoryRegistry.removeRepository(TEST_REPO_1);
+        repositoryRegistry.removeRepository(TEST_REPO_2);
+        repositoryRegistry.removeRepository(REPO_RELEASE);
+        repositoryRegistry.destroy();
         FileUtils.deleteDirectory( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + TEST_REPO_1 ) );
         assertFalse( Files.exists(Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + TEST_REPO_1 )) );
 
@@ -190,22 +197,32 @@ public abstract class AbstractMavenRepositorySearch
         repositoryConfig.setScanned( true );
         repositoryConfig.setSnapshots( false );
         repositoryConfig.setReleases( true );
+        repositoryConfig.setIndexDir(".indexer");
 
         return repositoryConfig;
     }
 
-    protected void createIndex( String repository, List<Path> filesToBeIndexed, boolean scan )
+    protected void createIndex( String repository, List<Path> filesToBeIndexed, boolean scan) throws Exception {
+        createIndex(repository, filesToBeIndexed, scan, null);
+    }
+
+    protected void createIndex( String repository, List<Path> filesToBeIndexed, boolean scan, Path indexDir)
         throws Exception
     {
+        Repository rRepo = repositoryRegistry.getRepository(repository);
+        IndexCreationFeature icf = rRepo.getFeature(IndexCreationFeature.class).get();
+
 
-        IndexingContext context = nexusIndexer.getIndexingContexts().get( repository );
+        IndexingContext context = rRepo.getIndexingContext().getBaseContext(IndexingContext.class);
 
         if ( context != null )
         {
-            nexusIndexer.removeIndexingContext( context, true );
+            context.close(true);
         }
 
-        Path indexerDirectory = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + repository + "/.indexer" );
+        Path repoDir = Paths.get(org.apache.archiva.common.utils.FileUtils.getBasedir()).resolve("target").resolve("repos").resolve(repository);
+
+        Path indexerDirectory = repoDir.resolve(".indexer" );
 
         if ( Files.exists(indexerDirectory) )
         {
@@ -214,7 +231,7 @@ public abstract class AbstractMavenRepositorySearch
 
         assertFalse( Files.exists(indexerDirectory) );
 
-        Path lockFile = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + repository + "/.indexer/write.lock" );
+        Path lockFile = repoDir.resolve(".indexer/write.lock" );
         if ( Files.exists(lockFile) )
         {
             Files.delete(lockFile);
@@ -224,14 +241,20 @@ public abstract class AbstractMavenRepositorySearch
 
         Path repo = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + repository );
         assertTrue( Files.exists(repo) );
-        Path indexDirectory =
-            Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/index/test-" + Long.toString( System.currentTimeMillis() ) );
-        indexDirectory.toFile().deleteOnExit();
-        FileUtils.deleteDirectory( indexDirectory );
+        org.apache.commons.io.FileUtils.copyDirectory(repo.toFile(), repoDir.toFile());
+
+        if (indexDir==null) {
+            Path indexDirectory =
+                    Paths.get(org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/index/test-" + Long.toString(System.currentTimeMillis()));
+            indexDirectory.toFile().deleteOnExit();
+            FileUtils.deleteDirectory(indexDirectory);
+            icf.setIndexPath(indexDirectory.toUri());
+        } else {
+
+            icf.setIndexPath(indexDir.toUri());
+        }
+        context = rRepo.getIndexingContext().getBaseContext(IndexingContext.class);
 
-        context = nexusIndexer.addIndexingContext( repository, repository, repo.toFile(), indexDirectory.toFile(),
-                                                   repo.toUri().toURL().toExternalForm(),
-                                                   indexDirectory.toUri().toURL().toString(), indexCreators );
 
         // minimize datas in memory
 //        context.getIndexWriter().setMaxBufferedDocs( -1 );
@@ -247,16 +270,20 @@ public abstract class AbstractMavenRepositorySearch
                 ac.getArtifactInfo().setPackaging( "pom" );
                 ac.getArtifactInfo().setClassifier( "pom" );
             }
-            nexusIndexer.addArtifactToIndex( ac, context );
+            indexer.addArtifactToIndex( ac, context );
             context.updateTimestamp( true );
         }
 
         if ( scan )
         {
-            nexusIndexer.scan( context, new ArtifactScanListener(), false );
+            DefaultScannerListener listener = new DefaultScannerListener( context, indexerEngine, true, new ArtifactScanListener());
+            ScanningRequest req = new ScanningRequest(context, listener );
+            scanner.scan( req );
+            context.commit();
         }
         // force flushing
-        context.getIndexWriter().commit();
+        context.commit();
+        //  context.getIndexWriter().commit();
         context.setSearchable( true );
 
     }

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchOSGITest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchOSGITest.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchOSGITest.java
index e99947f..066b2af 100644
--- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchOSGITest.java
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchOSGITest.java
@@ -22,9 +22,12 @@ package org.apache.archiva.indexer.maven.search;
 import org.apache.archiva.indexer.search.SearchFields;
 import org.apache.archiva.indexer.search.SearchResultHit;
 import org.apache.archiva.indexer.search.SearchResults;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.easymock.EasyMock;
+import org.junit.After;
 import org.junit.Test;
 
+import javax.inject.Inject;
 import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.Collections;
@@ -38,6 +41,16 @@ public class MavenRepositorySearchOSGITest
     extends AbstractMavenRepositorySearch
 {
 
+    @Inject
+    RepositoryRegistry repositoryRegistry;
+
+    @After
+    @Override
+    public void tearDown() throws Exception {
+        super.tearDown();
+        repositoryRegistry.destroy();
+    }
+
     @Test
     public void searchFelixWithSymbolicName()
         throws Exception

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchPaginateTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchPaginateTest.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchPaginateTest.java
index c8498b2..d679edf 100644
--- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchPaginateTest.java
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchPaginateTest.java
@@ -24,19 +24,37 @@ import org.apache.archiva.indexer.search.SearchResultHit;
 import org.apache.archiva.indexer.search.SearchResultLimits;
 import org.apache.archiva.indexer.search.SearchResults;
 import org.apache.archiva.indexer.util.SearchUtil;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.junit.After;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import java.util.Arrays;
 import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
 
 /**
  * @author Olivier Lamy
  */
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
 public class MavenRepositorySearchPaginateTest
     extends TestCase
 {
+
+    @Autowired
+    RepositoryRegistry repositoryRegistry;
+
+    @After
+    public void endTests() {
+        assert repositoryRegistry!=null;
+        repositoryRegistry.destroy();
+    }
+
     @Test
     public void nonPaginatedResult()
         throws Exception

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchTest.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchTest.java
index 1cc1574..eff589f 100644
--- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchTest.java
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchTest.java
@@ -50,11 +50,11 @@ public class MavenRepositorySearchTest
         throws Exception
     {
         List<Path> files = new ArrayList<>();
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test", TEST_REPO_1,
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos", TEST_REPO_1,
                               "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test", TEST_REPO_1,
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos", TEST_REPO_1,
                               "/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" ));
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test", TEST_REPO_1,
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos", TEST_REPO_1,
                               "org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ));
 
         createIndex( TEST_REPO_1, files, scan );
@@ -64,20 +64,20 @@ public class MavenRepositorySearchTest
         throws Exception
     {
         List<Path> files = new ArrayList<>();
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_1
             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_1
             + "/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" ) );
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_1
             + "/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ) );
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_1
             + "/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.war" ) );
         files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(),
-                             "src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1
+                             "target/repos/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_1
             + "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
         files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(),
-                             "src/test/" + TEST_REPO_1 + "/com/classname-search/1.0/classname-search-1.0.jar" ) );
+                             "target/repos/" + TEST_REPO_1 + "/com/classname-search/1.0/classname-search-1.0.jar" ) );
 
         createIndex( TEST_REPO_1, files, scan );
     }
@@ -87,13 +87,13 @@ public class MavenRepositorySearchTest
     {
         List<Path> files = new ArrayList<>();
 
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_1
             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
 
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_1
             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom" ) );
 
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_1
             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-sources.jar" ) );
 
         createIndex( TEST_REPO_1, files, scan );
@@ -337,9 +337,9 @@ public class MavenRepositorySearchTest
         createSimpleIndex( true );
 
         List<Path> files = new ArrayList<>();
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_2
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_2
             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_2
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_2
             + "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
         createIndex( TEST_REPO_2, files, false );
 
@@ -365,6 +365,7 @@ public class MavenRepositorySearchTest
 
         SearchResultHit hit =
             results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
+        assertNotNull(hit);
         assertEquals( "org.apache.archiva", hit.getGroupId() );
         assertEquals( "archiva-search", hit.getArtifactId() );
         assertEquals( "not 2 version for hit " + hit + "::" + niceDisplay( results ), 2, hit.getVersions().size() );
@@ -470,9 +471,9 @@ public class MavenRepositorySearchTest
         throws Exception
     {
         List<Path> files = new ArrayList<>();
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_2
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_2
             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_2
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_2
             + "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
         createIndex( TEST_REPO_2, files, false );
 
@@ -560,8 +561,8 @@ public class MavenRepositorySearchTest
     {
         List<Path> files = new ArrayList<>();
         files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(),
-                             "src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
-        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1
+                             "target/repos/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/repos/" + TEST_REPO_1
             + "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
         createIndex( TEST_REPO_1, files, true );
 
@@ -891,16 +892,19 @@ public class MavenRepositorySearchTest
     {
 
         Path repo = Paths.get( "target/repo-release" );
+        FileUtils.deleteDirectory(repo.toFile());
         Path indexDirectory = repo.resolve(".index" );
         FileUtils.copyDirectoryStructure( Paths.get( "src/test/repo-release" ).toFile(), repo.toFile() );
 
         IndexUpgrader.main( new String[]{ indexDirectory.toAbsolutePath().toString() } );
 
-        createIndex( "repo-release", Collections.emptyList(), false );
+        createIndex(REPO_RELEASE, Collections.emptyList(), false, indexDirectory );
+
+//        indexer.addIndexingContext( REPO_RELEASE, REPO_RELEASE, repo.toFile(), indexDirectory.toFile(),
+//                                         repo.toUri().toURL().toExternalForm(),
+//                                         indexDirectory.toUri().toURL().toString(), indexCreators );
+
 
-        nexusIndexer.addIndexingContext( REPO_RELEASE, REPO_RELEASE, repo.toFile(), indexDirectory.toFile(),
-                                         repo.toUri().toURL().toExternalForm(),
-                                         indexDirectory.toUri().toURL().toString(), indexCreators );
 
         SearchResultLimits limits = new SearchResultLimits( SearchResultLimits.ALL_PAGES );
         limits.setPageSize( 300 );

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/log4j2-test.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/log4j2-test.xml b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/log4j2-test.xml
new file mode 100644
index 0000000..db1c64d
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/log4j2-test.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+
+
+<configuration status="debug">
+  <appenders>
+    <Console name="console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
+    </Console>
+  </appenders>
+  <loggers>
+
+    <logger name="org.apache.archiva.repository" level="info"/>
+    <logger name="org.apache.archiva.indexer" level="info" />
+
+    <logger name="JPOX" level="error"/>
+
+
+    <logger name="org.springframework" level="error"/>
+
+
+    <root level="info">
+      <appender-ref ref="console"/>
+    </root>
+  </loggers>
+</configuration>
+
+

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/spring-context.xml b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/spring-context.xml
index fbf53be..83a361f 100644
--- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/spring-context.xml
@@ -28,7 +28,7 @@
        default-lazy-init="false">
 
   <context:annotation-config/>
-  <context:component-scan base-package="org.apache.archiva.indexer.maven" />
+  <context:component-scan base-package="org.apache.archiva.indexer.maven,org.apache.archiva.repository,org.apache.archiva.repository.content.maven2" />
 
 
   <bean name="wagon#file" scope="prototype" class="org.apache.maven.wagon.providers.file.FileWagon"/>

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-proxy/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/pom.xml b/archiva-modules/archiva-base/archiva-proxy/pom.xml
index efe7be3..85a3e60 100644
--- a/archiva-modules/archiva-base/archiva-proxy/pom.xml
+++ b/archiva-modules/archiva-base/archiva-proxy/pom.xml
@@ -215,6 +215,11 @@
       <scope>test</scope>
     </dependency>
 
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-maven2-indexer</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <plugins>

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java
index 2b8b9ab..08bcd96 100644
--- a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java
+++ b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/MockRepositoryArchivaTaskScheduler.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Service;
 /**
  * @author Olivier Lamy
  */
-@Service ("archivaTaskScheduler#repository")
+@Service ("archivaTaskScheduler#repositoryMock")
 public class MockRepositoryArchivaTaskScheduler
     implements RepositoryArchivaTaskScheduler
 {

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
index 4dcf747..3ab65bc 100644
--- a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
+++ b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
@@ -82,6 +82,9 @@ public abstract class AbstractProxyTestCase
     @Inject
     protected ApplicationContext applicationContext;
 
+    @Inject
+    RepositoryRegistry repositoryRegistry;
+
     protected static final String ID_PROXIED1 = "proxied1";
 
     protected static final String ID_PROXIED1_TARGET = "proxied1-target";
@@ -121,7 +124,6 @@ public abstract class AbstractProxyTestCase
 
     WagonDelegate delegate;
 
-    protected RepositoryRegistry repositoryRegistry;
 
     @Inject
     protected NexusIndexer nexusIndexer;
@@ -156,7 +158,6 @@ public abstract class AbstractProxyTestCase
         // to prevent windauze file leaking
         removeMavenIndexes();
 
-        repositoryRegistry = applicationContext.getBean( RepositoryRegistry.class );
         repositoryRegistry.setArchivaConfiguration( config );
 
         // Setup target (proxied to) repository.
@@ -167,6 +168,7 @@ public abstract class AbstractProxyTestCase
         saveRemoteRepositoryConfig( ID_PROXIED2, "Proxied Repository 2",
             Paths.get( REPOPATH_PROXIED2 ).toUri().toURL().toExternalForm(), "default" );
 
+
         repositoryRegistry.reload();
 
         if ( repositoryRegistry.getManagedRepository( repoConfig.getId() ) != null )

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
index c923ba9..81563b6 100644
--- a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
+++ b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
@@ -21,18 +21,7 @@ package org.apache.archiva.repository.mock;
 
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.repository.BasicManagedRepository;
-import org.apache.archiva.repository.BasicRemoteRepository;
-import org.apache.archiva.repository.EditableManagedRepository;
-import org.apache.archiva.repository.EditableRemoteRepository;
-import org.apache.archiva.repository.ManagedRepository;
-import org.apache.archiva.repository.PasswordCredentials;
-import org.apache.archiva.repository.ReleaseScheme;
-import org.apache.archiva.repository.RemoteRepository;
-import org.apache.archiva.repository.RepositoryCredentials;
-import org.apache.archiva.repository.RepositoryException;
-import org.apache.archiva.repository.RepositoryProvider;
-import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.*;
 import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
@@ -165,6 +154,8 @@ public class RepositoryProviderMock implements RepositoryProvider
             rif.setIndexUri( new URI( configuration.getIndexDir( ) ) );
             rif.setDownloadTimeout( Duration.ofSeconds( configuration.getRemoteDownloadTimeout( ) ) );
             rif.setProxyId( configuration.getRemoteDownloadNetworkProxyId( ) );
+            IndexCreationFeature icf = remoteRepository.getFeature(IndexCreationFeature.class).get();
+            icf.setIndexPath(new URI(".index" ));
         }
         catch ( Exception e )
         {
@@ -229,4 +220,8 @@ public class RepositoryProviderMock implements RepositoryProvider
         return configuration;
     }
 
+    @Override
+    public <T> void raise(RepositoryEvent<T> event) {
+
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml b/archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml
index baef8a5..65599f7 100755
--- a/archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml
@@ -33,6 +33,7 @@
 
   <alias name="archivaConfiguration#mock" alias="archivaConfiguration#default"/>
   <alias name="archivaConfiguration#mock" alias="archivaConfiguration"/>
+  <alias name="archivaTaskScheduler#repositoryMock" alias="archivaTaskScheduler#repository" />
 
   <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
     <property name="properties">

http://git-wip-us.apache.org/repos/asf/archiva/blob/c544376a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java
index a73e457..08d68cf 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java
@@ -22,6 +22,7 @@ package org.apache.archiva.admin.model.managed;
 import org.apache.archiva.admin.model.AuditInformation;
 import org.apache.archiva.admin.model.RepositoryAdminException;
 import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.indexer.ArchivaIndexingContext;
 import org.apache.maven.index.context.IndexingContext;
 
 import java.util.List;
@@ -57,16 +58,5 @@ public interface ManagedRepositoryAdmin
                                      AuditInformation auditInformation, boolean resetStats )
         throws RepositoryAdminException;
 
-    /**
-     *
-     * @param repository
-     * @return
-     * @throws RepositoryAdminException
-     * @since 1.4-M2
-     */
-    IndexingContext createIndexContext( ManagedRepository repository )
-            throws RepositoryAdminException;
 
-
-    IndexingContext createIndexContext( org.apache.archiva.repository.ManagedRepository repository) throws RepositoryAdminException;
 }