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/11/10 23:20:46 UTC

[03/15] archiva git commit: Renaming archiva-indexer module to archiva-maven2-indexer

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java
new file mode 100644
index 0000000..3c10633
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java
@@ -0,0 +1,937 @@
+package org.apache.archiva.indexer.search;
+
+/*
+ * 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.
+ */
+
+import org.apache.archiva.configuration.ConfigurationEvent;
+import org.apache.archiva.configuration.ConfigurationListener;
+import org.apache.archiva.indexer.util.SearchUtil;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.maven.index_shaded.lucene.index.IndexUpgrader;
+import org.codehaus.plexus.util.FileUtils;
+import org.easymock.EasyMock;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+
+
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public class MavenRepositorySearchTest
+    extends AbstractMavenRepositorySearch
+{
+
+
+    private void createSimpleIndex( boolean scan )
+        throws Exception
+    {
+        List<Path> files = new ArrayList<>();
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test", 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,
+                              "/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,
+                              "org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ));
+
+        createIndex( TEST_REPO_1, files, scan );
+    }
+
+    private void createIndexContainingMoreArtifacts( boolean scan )
+        throws Exception
+    {
+        List<Path> files = new ArrayList<>();
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + 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
+            + "/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
+            + "/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
+            + "/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
+            + "/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" ) );
+
+        createIndex( TEST_REPO_1, files, scan );
+    }
+
+    private void createIndexContainingMultipleArtifactsSameVersion( boolean scan )
+        throws Exception
+    {
+        List<Path> files = new ArrayList<>();
+
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + 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
+            + "/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
+            + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-sources.jar" ) );
+
+        createIndex( TEST_REPO_1, files, scan );
+    }
+
+    @Test
+    public void testQuickSearch()
+        throws Exception
+    {
+        createSimpleIndex( false );
+
+        List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
+
+        // search artifactId
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+
+        SearchResultHit hit =
+            results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
+        assertNotNull( "hit null in result " + results.getHits(), hit );
+        assertEquals( "org.apache.archiva", hit.getGroupId() );
+        assertEquals( "archiva-search", hit.getArtifactId() );
+        assertEquals( "1.0", hit.getVersions().get( 0 ) );
+
+        archivaConfigControl.reset();
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        // search groupId
+        archivaConfigControl.replay();
+
+        results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( "total hints not 3", 3, results.getTotalHits() );
+
+        //TODO: search for class & package names
+    }
+
+    @Test
+    public void testQuickSearchNotWithClassifier()
+        throws Exception
+    {
+        createSimpleIndex( true );
+
+        List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
+
+        // search artifactId
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+
+        SearchResultHit hit =
+            results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
+        assertNotNull( "hit null in result " + results.getHits(), hit );
+        assertEquals( "org.apache.archiva", hit.getGroupId() );
+        assertEquals( "archiva-search", hit.getArtifactId() );
+        assertEquals( "1.0", hit.getVersions().get( 0 ) );
+
+        archivaConfigControl.reset();
+
+        // search groupId
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        results = search.search( "user", selectedRepos, "archiva-search", null, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( "total hints not 3 hits " + results.getHits(), 3, results.getTotalHits() );
+
+        //TODO: search for class & package names
+    }
+
+    @Test
+    public void testQuickSearchMultipleArtifactsSameVersion()
+        throws Exception
+    {
+        createIndexContainingMultipleArtifactsSameVersion( false );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        // search artifactId
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 3, results.getTotalHits() );
+
+        SearchResultHit hit = results.getHits().get( 0 );
+        assertEquals( "org.apache.archiva", hit.getGroupId() );
+        assertEquals( "archiva-search", hit.getArtifactId() );
+        assertEquals( "1.0", hit.getVersions().get( 0 ) );
+
+        //only 1 version of 1.0 is retrieved
+        assertEquals( 1, hit.getVersions().size() );
+    }
+
+    @Test
+    public void testMultipleArtifactsSameVersionWithClassifier()
+        throws Exception
+    {
+        createIndexContainingMultipleArtifactsSameVersion( true );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        // search artifactId
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setGroupId( "org.apache.archiva" );
+        searchFields.setArtifactId( "archiva-search" );
+        searchFields.setClassifier( "sources" );
+        searchFields.setRepositories( selectedRepos );
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 1, results.getTotalHits() );
+
+        SearchResultHit hit = results.getHits().get( 0 );
+        assertEquals( "org.apache.archiva", hit.getGroupId() );
+        assertEquals( "archiva-search", hit.getArtifactId() );
+        assertEquals( "1.0", hit.getVersions().get( 0 ) );
+
+        //only 1 version of 1.0 is retrieved
+        assertEquals( 1, hit.getVersions().size() );
+    }
+
+    // search for existing artifact using multiple keywords
+    @Test
+    public void testQuickSearchWithMultipleKeywords()
+        throws Exception
+    {
+        createSimpleIndex( false );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", selectedRepos, "archiva search", null, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 1, results.getTotalHits() );
+    }
+
+    @Test
+    public void testQuickSearchWithPagination()
+        throws Exception
+    {
+        createSimpleIndex( true );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        // page 1
+        SearchResultLimits limits = new SearchResultLimits( 0 );
+        limits.setPageSize( 1 );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", selectedRepos, "org", limits, Collections.emptyList() );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 1, results.getHits().size() );
+        assertEquals( "total hits not 9 for page1 " + results, 9, results.getTotalHits() );
+        assertEquals( "returned hits not 1 for page1 " + results, 1, results.getReturnedHitsCount() );
+        assertEquals( limits, results.getLimits() );
+
+        archivaConfigControl.reset();
+
+        // page 2
+        limits = new SearchResultLimits( 1 );
+        limits.setPageSize( 1 );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        results = search.search( "user", selectedRepos, "org", limits, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+
+        assertEquals( "hits not 1", 1, results.getHits().size() );
+        assertEquals( "total hits not 9 for page 2 " + results, 9, results.getTotalHits() );
+        assertEquals( "returned hits not 1 for page2 " + results, 1, results.getReturnedHitsCount() );
+        assertEquals( limits, results.getLimits() );
+    }
+
+    @Test
+    public void testArtifactFoundInMultipleRepositories()
+        throws Exception
+    {
+        createSimpleIndex( true );
+
+        List<Path> files = new ArrayList<>();
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + 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
+            + "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
+        createIndex( TEST_REPO_2, files, false );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+        selectedRepos.add( TEST_REPO_2 );
+
+        config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        // wait lucene flush.....
+        Thread.sleep( 2000 );
+
+        SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+
+        SearchResultHit hit =
+            results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
+        assertEquals( "org.apache.archiva", hit.getGroupId() );
+        assertEquals( "archiva-search", hit.getArtifactId() );
+        assertEquals( "not 2 version for hit " + hit + "::" + niceDisplay( results ), 2, hit.getVersions().size() );
+        assertTrue( hit.getVersions().contains( "1.0" ) );
+        assertTrue( hit.getVersions().contains( "1.1" ) );
+
+        archivaConfigControl.reset();
+
+        // TODO: [BROWSE] in artifact info from browse, display all the repositories where the artifact is found
+    }
+
+    @Test
+    public void testNoMatchFound()
+        throws Exception
+    {
+        createSimpleIndex( false );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", selectedRepos, "dfghdfkweriuasndsaie", null, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 0, results.getTotalHits() );
+    }
+
+    @Test
+    public void testNoIndexFound()
+        throws Exception
+    {
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
+        assertNotNull( results );
+        assertEquals( 0, results.getTotalHits() );
+
+        archivaConfigControl.verify();
+    }
+
+    @Test
+    public void testRepositoryNotFound()
+        throws Exception
+    {
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( "non-existing-repo" );
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
+        assertNotNull( results );
+        assertEquals( 0, results.getTotalHits() );
+
+        archivaConfigControl.verify();
+    }
+
+    @Test
+    public void testSearchWithinSearchResults()
+        throws Exception
+    {
+        createSimpleIndex( true );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        List<String> previousSearchTerms = new ArrayList<>();
+        previousSearchTerms.add( "archiva-test" );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", selectedRepos, "1.0", null, previousSearchTerms );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( "total hints not 1", 1, results.getTotalHits() );
+
+        SearchResultHit hit = results.getHits().get( 0 );
+        assertEquals( "org.apache.archiva", hit.getGroupId() );
+        assertEquals( "archiva-test", hit.getArtifactId() );
+        assertEquals( "versions not 1", 1, hit.getVersions().size() );
+        assertEquals( "1.0", hit.getVersions().get( 0 ) );
+    }
+
+    // tests for advanced search
+    @Test
+    public void testAdvancedSearch()
+        throws Exception
+    {
+        List<Path> files = new ArrayList<>();
+        files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + 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
+            + "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
+        createIndex( TEST_REPO_2, files, false );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_2 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setGroupId( "org.apache.archiva" );
+        searchFields.setVersion( "1.0" );
+        searchFields.setRepositories( selectedRepos );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 1, results.getTotalHits() );
+
+        SearchResultHit hit = results.getHits().get( 0 );
+        assertEquals( "org.apache.archiva", hit.getGroupId() );
+        assertEquals( "archiva-search", hit.getArtifactId() );
+        assertEquals( "1.0", hit.getVersions().get( 0 ) );
+    }
+
+    @Test
+    public void testAdvancedSearchWithPagination()
+        throws Exception
+    {
+        createIndexContainingMoreArtifacts( false );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setGroupId( "org.apache.archiva" );
+        searchFields.setRepositories( selectedRepos );
+
+        // page 1
+
+        SearchResultLimits limits = new SearchResultLimits( 0 );
+        limits.setPageSize( 1 );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, limits );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 4, results.getTotalHits() );
+        assertEquals( 1, results.getHits().size() );
+
+        // page 2
+        archivaConfigControl.reset();
+
+        limits = new SearchResultLimits( 1 );
+        limits.setPageSize( 1 );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        results = search.search( "user", searchFields, limits );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 4, results.getTotalHits() );
+        assertEquals( 1, results.getHits().size() );
+    }
+
+    // MRM-981 - artifactIds with numeric characters aren't found in advanced search
+    @Test
+    public void testAdvancedSearchArtifactIdHasNumericChar()
+        throws Exception
+    {
+        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
+            + "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
+        createIndex( TEST_REPO_1, files, true );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setArtifactId( "artifactid-numeric" );
+        searchFields.setRepositories( selectedRepos );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 2, results.getTotalHits() );
+    }
+
+    @Test
+    public void testAdvancedSearchNoRepositoriesConfigured()
+        throws Exception
+    {
+        SearchFields searchFields = new SearchFields();
+        searchFields.setArtifactId( "archiva" );
+        searchFields.setRepositories( null );
+
+        try
+        {
+            search.search( "user", searchFields, null );
+            fail( "A RepositorySearchExcecption should have been thrown." );
+        }
+        catch ( RepositorySearchException e )
+        {
+            assertEquals( "Repositories cannot be null.", e.getMessage() );
+        }
+    }
+
+    @Test
+    public void testAdvancedSearchSearchFieldsAreNull()
+        throws Exception
+    {
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setRepositories( selectedRepos );
+
+        try
+        {
+            EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+            EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+            archivaConfigControl.replay();
+
+            search.search( "user", searchFields, null );
+
+            archivaConfigControl.verify();
+
+            fail( "A RepositorySearchExcecption should have been thrown." );
+        }
+        catch ( RepositorySearchException e )
+        {
+            assertEquals( "No search fields set.", e.getMessage() );
+        }
+    }
+
+    @Test
+    public void testAdvancedSearchSearchFieldsAreBlank()
+        throws Exception
+    {
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setGroupId( "" );
+        searchFields.setArtifactId( "" );
+        searchFields.setVersion( "" );
+        searchFields.setPackaging( "" );
+        searchFields.setClassName( "" );
+
+        searchFields.setRepositories( selectedRepos );
+
+        try
+        {
+
+            EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+            EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+            archivaConfigControl.replay();
+
+            search.search( "user", searchFields, null );
+
+            archivaConfigControl.verify();
+
+            fail( "A RepositorySearchException should have been thrown." );
+        }
+        catch ( RepositorySearchException e )
+        {
+            assertEquals( "No search fields set.", e.getMessage() );
+        }
+    }
+
+    @Test
+    public void testAdvancedSearchAllSearchCriteriaSpecified()
+        throws Exception
+    {
+        createSimpleIndex( true );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setGroupId( "org.apache.archiva" );
+        searchFields.setArtifactId( "archiva-test" );
+        searchFields.setVersion( "2.0" );
+        searchFields.setPackaging( "jar" );
+        searchFields.setClassName( "org.apache.archiva.test.App" );
+        searchFields.setRepositories( selectedRepos );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+
+        assertEquals( "total hints not 1" + results, 1, results.getTotalHits() );
+
+        SearchResultHit hit = results.getHits().get( 0 );
+        assertEquals( "org.apache.archiva", hit.getGroupId() );
+        assertEquals( "archiva-test", hit.getArtifactId() );
+        assertEquals( "version not 2.0", "2.0", hit.getVersions().get( 0 ) );
+    }
+
+    @Test
+    public void testAdvancedSearchJarArtifacts()
+        throws Exception
+    {
+        createIndexContainingMoreArtifacts( true );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setPackaging( "jar" );
+        searchFields.setRepositories( selectedRepos );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( "not 8 but " + results.getTotalHits() + ":" + niceDisplay( results ), 8, results.getTotalHits() );
+    }
+
+    @Test
+    public void testAdvancedSearchWithIncorrectPackaging()
+        throws Exception
+    {
+        createSimpleIndex( true );
+
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setGroupId( "org.apache.archiva" );
+        searchFields.setArtifactId( "archiva-test" );
+        searchFields.setVersion( "2.0" );
+        searchFields.setPackaging( "war" );
+        searchFields.setRepositories( selectedRepos );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 0, results.getTotalHits() );
+    }
+
+    @Test
+    public void testAdvancedSearchClassname()
+        throws Exception
+    {
+        createIndexContainingMoreArtifacts( true );
+
+        List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setClassName( "com.classname.search.App" );
+        searchFields.setRepositories( selectedRepos );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( "totalHits not 1 results " + results, 1, results.getTotalHits() );
+
+        SearchResultHit hit = results.getHits().get( 0 );
+        assertEquals( "groupId not com", "com", hit.getGroupId() );
+        assertEquals( "arttifactId not classname-search", "classname-search", hit.getArtifactId() );
+        assertEquals( " hits.version(0) not 1.0", "1.0", hit.getVersions().get( 0 ) );
+    }
+
+    @Test
+    public void testAdvancedSearchNoIndexFound()
+        throws Exception
+    {
+        List<String> selectedRepos = new ArrayList<>();
+        selectedRepos.add( TEST_REPO_1 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setGroupId( "org.apache.archiva" );
+        searchFields.setRepositories( selectedRepos );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 0, results.getTotalHits() );
+    }
+
+    @Test
+    public void testAdvancedSearchClassNameInWar()
+        throws Exception
+    {
+        createIndexContainingMoreArtifacts( true );
+
+        List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setClassName( "SomeClass" );
+        searchFields.setRepositories( selectedRepos );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 1, results.getHits().size() );
+        assertEquals( "test-webapp", results.getHits().get( 0 ).getArtifactId() );
+    }
+
+    @Test
+    public void getAllGroupIds()
+        throws Exception
+    {
+        createIndexContainingMoreArtifacts( true );
+
+        List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
+
+        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 0, 2 );
+
+        archivaConfigControl.replay();
+
+        Collection<String> groupIds = search.getAllGroupIds( "user", selectedRepos );
+
+        archivaConfigControl.verify();
+
+        log.info( "groupIds: {}", groupIds );
+
+        assertEquals( 3, groupIds.size() );
+        assertTrue( groupIds.contains( "com" ) );
+        assertTrue( groupIds.contains( "org.apache.felix" ) );
+        assertTrue( groupIds.contains( "org.apache.archiva" ) );
+    }
+
+    @Test
+    public void testSearchWithUnknownRepo()
+        throws Exception
+    {
+        createIndexContainingMoreArtifacts( true );
+
+        List<String> selectedRepos = Arrays.asList( "foo" );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setClassName( "SomeClass" );
+        searchFields.setRepositories( selectedRepos );
+
+        archivaConfigControl.replay();
+
+        SearchResults results = search.search( "user", searchFields, null );
+
+        archivaConfigControl.verify();
+
+        assertNotNull( results );
+        assertEquals( 0, results.getHits().size() );
+    }
+
+    @Test
+    public void nolimitedResult()
+        throws Exception
+    {
+
+        Path repo = Paths.get( "target/repo-release" );
+        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 );
+
+        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 );
+
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
+        archivaConfigControl.replay();
+
+        SearchResults searchResults = search.search( null, Arrays.asList( REPO_RELEASE ), //
+                                                     "org.example", limits, //
+                                                     Collections.emptyList() );
+
+        log.info( "results: {}", searchResults.getHits().size() );
+
+        assertEquals( 255, searchResults.getHits().size() );
+
+        SearchFields searchFields = new SearchFields();
+        searchFields.setGroupId( "org.example" );
+        searchFields.setRepositories( Arrays.asList( REPO_RELEASE ) );
+
+        searchResults = search.search( null, searchFields, limits );
+
+        log.info( "results: {}", searchResults.getHits().size() );
+
+        assertEquals( 255, searchResults.getHits().size() );
+
+        archivaConfigControl.verify();
+    }
+}

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar
new file mode 100644
index 0000000..9c16c3c
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom
new file mode 100644
index 0000000..b0d983f
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom
@@ -0,0 +1,28 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.archiva</groupId>
+  <artifactId>archiva-search</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+  <name>Archiva Search</name>
+  <url>http://archiva.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.3</version>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.8</version>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar
new file mode 100644
index 0000000..97eaf86
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.pom
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.pom b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.pom
new file mode 100644
index 0000000..be02c7c
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo-2/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.pom
@@ -0,0 +1,28 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.archiva</groupId>
+  <artifactId>archiva-search</artifactId>
+  <packaging>jar</packaging>
+  <version>1.1</version>
+  <name>Archiva Search</name>
+  <url>http://archiva.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.3</version>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.8</version>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric/1.0/artifactid-numeric-1.0.pom
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric/1.0/artifactid-numeric-1.0.pom b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric/1.0/artifactid-numeric-1.0.pom
new file mode 100644
index 0000000..3ef0bb6
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric/1.0/artifactid-numeric-1.0.pom
@@ -0,0 +1,17 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com</groupId>
+  <artifactId>artifactid-numeric</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+  <name>ArtifactID numeric - NOT</name>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.pom
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.pom b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.pom
new file mode 100644
index 0000000..5d87546
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.pom
@@ -0,0 +1,17 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com</groupId>
+  <artifactId>artifactid-numeric123</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+  <name>ArtifactID numeric</name>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/classname-search/1.0/classname-search-1.0.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/classname-search/1.0/classname-search-1.0.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/classname-search/1.0/classname-search-1.0.jar
new file mode 100644
index 0000000..0572c67
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/classname-search/1.0/classname-search-1.0.jar differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/classname-search/1.0/classname-search-1.0.pom
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/classname-search/1.0/classname-search-1.0.pom b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/classname-search/1.0/classname-search-1.0.pom
new file mode 100644
index 0000000..80b54ab
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/com/classname-search/1.0/classname-search-1.0.pom
@@ -0,0 +1,18 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com</groupId>
+  <artifactId>classname-search</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+  <name>classname-search</name>
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-patch1.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-patch1.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-patch1.jar
new file mode 100644
index 0000000..9c16c3c
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-patch1.jar differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-sources.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-sources.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-sources.jar
new file mode 100644
index 0000000..9c16c3c
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-sources.jar differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar
new file mode 100644
index 0000000..9c16c3c
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom
new file mode 100644
index 0000000..b0d983f
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom
@@ -0,0 +1,28 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.archiva</groupId>
+  <artifactId>archiva-search</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+  <name>Archiva Search</name>
+  <url>http://archiva.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.3</version>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.8</version>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar
new file mode 100644
index 0000000..843ee45
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.pom
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.pom b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.pom
new file mode 100644
index 0000000..0b037a3
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.pom
@@ -0,0 +1,23 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.archiva</groupId>
+  <artifactId>archiva-test</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+  <name>archiva-test</name>
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.3</version>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar
new file mode 100644
index 0000000..e904a17
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.pom
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.pom b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.pom
new file mode 100644
index 0000000..04fdb48
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.pom
@@ -0,0 +1,28 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.archiva</groupId>
+  <artifactId>archiva-test</artifactId>
+  <packaging>jar</packaging>
+  <version>2.0</version>
+  <name>Archiva Test</name>
+  <url>http://archiva.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.3</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>1.4</version>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.pom
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.pom b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.pom
new file mode 100644
index 0000000..ca28dc1
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.pom
@@ -0,0 +1,23 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.archiva</groupId>
+  <artifactId>archiva-webapp</artifactId>
+  <packaging>war</packaging>
+  <version>1.0</version>
+  <name>Archiva Webapp</name>
+  <url>http://archiva.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.8</version>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.war
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.war b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.war
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/test-webapp/1.0-SNAPSHOT/test-webapp-1.0-SNAPSHOT.war
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/test-webapp/1.0-SNAPSHOT/test-webapp-1.0-SNAPSHOT.war b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/test-webapp/1.0-SNAPSHOT/test-webapp-1.0-SNAPSHOT.war
new file mode 100644
index 0000000..5559103
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/archiva/test-webapp/1.0-SNAPSHOT/test-webapp-1.0-SNAPSHOT.war differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.jar
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.jar b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.jar
new file mode 100644
index 0000000..218330e
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.jar differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.pom
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.pom b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.pom
new file mode 100644
index 0000000..19831ee
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/maven-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.pom
@@ -0,0 +1,138 @@
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <groupId>org.apache.felix</groupId>
+    <artifactId>felix-parent</artifactId>
+    <version>2.1</version>
+    <relativePath>../pom/pom.xml</relativePath>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <packaging>bundle</packaging>
+  <name>Apache Felix Bundle Repository</name>
+  <description>Bundle repository service.</description>
+  <artifactId>org.apache.felix.bundlerepository</artifactId>
+  <version>1.6.6</version>
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/felix/releases/org.apache.felix.bundlerepository-1.6.6</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.bundlerepository-1.6.6</developerConnection>
+    <url>http://svn.apache.org/repos/asf/felix/releases/org.apache.felix.bundlerepository-1.6.6</url>
+  </scm>
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>org.apache.felix.utils</artifactId>
+      <version>1.1.0</version>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>org.osgi.service.obr</artifactId>
+      <version>1.0.2</version>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>org.apache.felix.shell</artifactId>
+      <version>1.4.1</version>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>net.sf.kxml</groupId>
+      <artifactId>kxml2</artifactId>
+      <version>2.3.0</version>
+      <optional>true</optional>
+      <exclusions>
+        <exclusion>
+          <groupId>xmlpull</groupId>
+          <artifactId>xmlpull</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+        <groupId>org.osgi</groupId>
+        <artifactId>org.osgi.compendium</artifactId>
+        <version>4.0.0</version>
+        <optional>true</optional>
+    </dependency>
+    <dependency>
+       <groupId>org.osgi</groupId>
+        <artifactId>org.osgi.core</artifactId>
+        <version>4.1.0</version>
+    </dependency>
+    <dependency>
+        <groupId>org.codehaus.woodstox</groupId>
+        <artifactId>woodstox-core-asl</artifactId>
+        <version>4.0.7</version>
+        <optional>true</optional>
+    </dependency>
+    <dependency>
+        <groupId>org.easymock</groupId>
+        <artifactId>easymock</artifactId>
+        <version>2.4</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <version>2.3.4</version>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+            <Export-Package>org.apache.felix.bundlerepository;version="2.0"</Export-Package>
+            <Private-Package>
+                org.kxml2.io,
+                org.xmlpull.v1,
+                org.apache.felix.bundlerepository.impl.*,
+                org.apache.felix.utils.*
+            </Private-Package>
+            <Import-Package>!javax.xml.parsers,!org.xml.sax,org.osgi.service.log;resolution:=optional,org.osgi.service.obr;resolution:=optional,javax.xml.stream;resolution:=optional,*</Import-Package>
+            <DynamicImport-Package>org.apache.felix.shell</DynamicImport-Package>
+            <Bundle-Activator>${project.artifactId}.impl.Activator</Bundle-Activator>
+            <Bundle-DocURL>http://felix.apache.org/site/apache-felix-osgi-bundle-repository.html</Bundle-DocURL>
+            <Bundle-Url>http://felix.apache.org/site/downloads.cgi</Bundle-Url>
+            <Bundle-Source>http://felix.apache.org/site/downloads.cgi</Bundle-Source>
+            <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+            <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
+            <Export-Service>org.apache.felix.bundlerepository.RepositoryAdmin,org.osgi.service.obr.RepositoryAdmin</Export-Service>
+            <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
+            <Include-Resource>META-INF/LICENSE=LICENSE,META-INF/LICENSE.kxml2=LICENSE.kxml2,META-INF/NOTICE=NOTICE,META-INF/DEPENDENCIES=DEPENDENCIES</Include-Resource>
+          </instructions>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+        <configuration>
+          <excludeSubProjects>false</excludeSubProjects>
+          <useEclipseDefaultExcludes>true</useEclipseDefaultExcludes>
+          <useMavenDefaultExcludes>true</useMavenDefaultExcludes>
+          <excludes>
+            <param>doc/*</param>
+            <param>maven-eclipse.xml</param>
+            <param>.checkstyle</param>
+            <param>.externalToolBuilders/*</param>
+          </excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fdt
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fdt b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fdt
new file mode 100644
index 0000000..9ab6d4d
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fdt differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fdx
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fdx b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fdx
new file mode 100644
index 0000000..a26fbfa
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fdx differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fnm
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fnm b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fnm
new file mode 100644
index 0000000..b9f9243
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.fnm differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.nvd
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.nvd b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.nvd
new file mode 100644
index 0000000..d832c2f
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.nvd differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.nvm
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.nvm b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.nvm
new file mode 100644
index 0000000..a27cff8
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.nvm differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.si
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.si b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.si
new file mode 100644
index 0000000..2539c76
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8.si differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.doc
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.doc b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.doc
new file mode 100644
index 0000000..0a2394b
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.doc differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.pos
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.pos b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.pos
new file mode 100644
index 0000000..4d9bbaa
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.pos differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.tim
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.tim b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.tim
new file mode 100644
index 0000000..ac84752
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.tim differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.tip
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.tip b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.tip
new file mode 100644
index 0000000..d94d9c9
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/_8_Lucene41_0.tip differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/segments.gen
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/segments.gen b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/segments.gen
new file mode 100644
index 0000000..077a451
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/segments.gen differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/segments_9
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/segments_9 b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/segments_9
new file mode 100644
index 0000000..a01b84f
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/segments_9 differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/timestamp
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/timestamp b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/timestamp
new file mode 100644
index 0000000..9028164
Binary files /dev/null and b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/timestamp differ

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/write.lock
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/write.lock b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/repo-release/.index/write.lock
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/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
new file mode 100644
index 0000000..e0bf5c4
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/spring-context.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0"?>
+
+<!--
+  ~ 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.
+  -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+           http://www.springframework.org/schema/context
+           http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
+       default-lazy-init="false">
+
+  <context:annotation-config/>
+
+  <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
+    <property name="properties">
+      <props>
+        <prop key="org.quartz.scheduler.instanceName">scheduler1</prop>
+        <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
+        <prop key="org.quartz.threadPool.threadCount">2</prop>
+        <prop key="org.quartz.threadPool.threadPriority">4</prop>
+        <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
+      </props>
+    </property>
+  </bean>
+  <alias name="userConfiguration#redback" alias="userConfiguration#default"/>
+
+  <!-- ***
+     JPA settings
+     *** -->
+  <bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+    <property name="jpaVendorAdapter" >
+      <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" />
+    </property>
+    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence-hsqldb.xml" />
+    <property name="jpaPropertyMap">
+      <map>
+        <entry key="openjpa.ConnectionURL" value="jdbc:hsqldb:mem:redback_database" />
+        <entry key="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver" />
+        <entry key="openjpa.ConnectionUserName" value="sa" />
+        <entry key="openjpa.ConnectionPassword" value="" />
+        <entry key="openjpa.Log" value="${openjpa.Log:DefaultLevel=INFO,Runtime=ERROR,Tool=ERROR,SQL=ERROR,Schema=ERROR,MetaData=ERROR}" />
+        <entry key="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" />
+        <entry key="openjpa.jdbc.MappingDefaults"
+               value="ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict"/>
+      </map>
+    </property>
+
+  </bean>
+
+  <bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
+    <property name="entityManagerFactory" ref="entityManagerFactory" />
+  </bean>
+
+  <tx:annotation-driven />
+  <!-- ***
+     End of JPA settings
+     *** -->
+
+</beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-base/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/pom.xml b/archiva-modules/archiva-base/pom.xml
index 5c3d64f..54bd4aa 100644
--- a/archiva-modules/archiva-base/pom.xml
+++ b/archiva-modules/archiva-base/pom.xml
@@ -40,7 +40,7 @@
     <module>archiva-plexus-bridge</module>
     <module>archiva-policies</module>
     <module>archiva-repository-api</module>
-    <module>archiva-indexer</module>
+    <module>archiva-maven2-indexer</module>
     <module>archiva-consumers</module>
     <module>archiva-repository-layer</module>
     <module>archiva-xml-tools</module>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-karaf/archiva-features/src/main/resources/features.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-karaf/archiva-features/src/main/resources/features.xml b/archiva-modules/archiva-karaf/archiva-features/src/main/resources/features.xml
index dc5f9f7..492f96c 100644
--- a/archiva-modules/archiva-karaf/archiva-features/src/main/resources/features.xml
+++ b/archiva-modules/archiva-karaf/archiva-features/src/main/resources/features.xml
@@ -275,13 +275,13 @@
     <bundle>mvn:org.apache.archiva/archiva-converter/${project.version}</bundle>
   </feature>
 
-  <feature name="archiva-indexer" description="Archiva Indexer module" version="${project.version}" resolver="(obr)">
+  <feature name="archiva-maven2-indexer" description="Archiva Maven2 Indexer module" version="${project.version}" resolver="(obr)">
     <feature version="${project.version}">archiva-repository-admin-api</feature>
     <feature version="${project.version}">archiva-plexus-bridge</feature>
     <bundle dependency="true">mvn:commons-io/commons-io/${commons-io.version}</bundle>
     <bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.lucene/${lucene.bundle.version}</bundle>
     <bundle dependency="true">wrap:mvn:org.apache.maven.indexer/indexer-core/${maven.indexer.version}</bundle>
-    <bundle>mvn:org.apache.archiva/archiva-indexer/${project.version}</bundle>
+    <bundle>mvn:org.apache.archiva/archiva-maven2-indexer/${project.version}</bundle>
   </feature>
 
   <feature name="archiva-security-common" description="Archiva Security Common module" version="${project.version}" resolver="(obr)">
@@ -298,7 +298,7 @@
   <feature name="archiva-rest-services" description="Archiva REST Services module" version="${project.version}" resolver="(obr)">
     <feature version="${project.version}">archiva-rest-api</feature>
     <feature version="${project.version}">archiva-audit</feature>
-    <feature version="${project.version}">archiva-indexer</feature>
+    <feature version="${project.version}">archiva-maven2-indexer</feature>
     <feature version="${project.version}">archiva-checksum</feature>
     <feature version="${project.version}">archiva-repository-layer</feature>
     <bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xpp3/${xpp3.bundle.version}</bundle>
@@ -331,7 +331,7 @@
 
   <feature name="archiva-webdav" description="Archiva WebDav module" version="${project.version}" resolver="(obr)">
     <feature version="${project.version}">archiva-audit</feature>
-    <feature version="${project.version}">archiva-indexer</feature>
+    <feature version="${project.version}">archiva-maven2-indexer</feature>
     <feature version="${project.version}">archiva-proxy</feature>
     <feature version="${project.version}">archiva-security</feature>
     <feature>http</feature>
@@ -395,7 +395,7 @@
     <feature version="${project.version}">archiva-configuration</feature>
     <feature version="${project.version}">archiva-repository-statistics</feature>
     <feature version="${project.version}">archiva-scheduler</feature>
-    <feature version="${project.version}">archiva-indexer</feature>
+    <feature version="${project.version}">archiva-maven2-indexer</feature>
     <feature version="${project.version}">archiva-generic-metadata-support</feature>
     <feature version="${project.version}">archiva-rest-api</feature>
     <feature version="${project.version}">archiva-rss</feature>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-web/archiva-webapp/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webapp/pom.xml b/archiva-modules/archiva-web/archiva-webapp/pom.xml
index 13678bf..92ae8f2 100644
--- a/archiva-modules/archiva-web/archiva-webapp/pom.xml
+++ b/archiva-modules/archiva-web/archiva-webapp/pom.xml
@@ -66,7 +66,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.archiva</groupId>
-      <artifactId>archiva-indexer</artifactId>
+      <artifactId>archiva-maven2-indexer</artifactId>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/archiva-modules/archiva-web/archiva-webdav/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/pom.xml b/archiva-modules/archiva-web/archiva-webdav/pom.xml
index 1a28879..adfa9ac 100644
--- a/archiva-modules/archiva-web/archiva-webdav/pom.xml
+++ b/archiva-modules/archiva-web/archiva-webdav/pom.xml
@@ -88,7 +88,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.archiva</groupId>
-      <artifactId>archiva-indexer</artifactId>
+      <artifactId>archiva-maven2-indexer</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.archiva</groupId>

http://git-wip-us.apache.org/repos/asf/archiva/blob/07d51cc3/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2469fd3..03ad3ec 100644
--- a/pom.xml
+++ b/pom.xml
@@ -289,7 +289,7 @@
       </dependency>
       <dependency>
         <groupId>org.apache.archiva</groupId>
-        <artifactId>archiva-indexer</artifactId>
+        <artifactId>archiva-maven2-indexer</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>