diff --git a/indexer-examples/indexer-examples-spring/src/test/java/org/apache/maven/indexer/examples/SimpleArtifactGenerator.java b/indexer-examples/indexer-examples-spring/src/test/java/org/apache/maven/indexer/examples/SimpleArtifactGenerator.java
index 2ed1c56..2c7e60b 100644
--- a/indexer-examples/indexer-examples-spring/src/test/java/org/apache/maven/indexer/examples/SimpleArtifactGenerator.java
+++ b/indexer-examples/indexer-examples-spring/src/test/java/org/apache/maven/indexer/examples/SimpleArtifactGenerator.java
@@ -41,6 +41,7 @@
 
     public SimpleArtifactGenerator()
     {
+        // no op
     }
 
     public File generateArtifact( String repositoryBasedir,
diff --git a/indexer-examples/indexer-examples-spring/src/test/java/org/apache/maven/indexer/examples/boot/RepositoryBooter.java b/indexer-examples/indexer-examples-spring/src/test/java/org/apache/maven/indexer/examples/boot/RepositoryBooter.java
index 19ad7c6..aa2bd40 100644
--- a/indexer-examples/indexer-examples-spring/src/test/java/org/apache/maven/indexer/examples/boot/RepositoryBooter.java
+++ b/indexer-examples/indexer-examples-spring/src/test/java/org/apache/maven/indexer/examples/boot/RepositoryBooter.java
@@ -19,20 +19,18 @@
  * under the License.
  */
 
-import javax.annotation.PostConstruct;
-import java.io.File;
-import java.io.IOException;
-
 import org.apache.maven.indexer.examples.indexing.RepositoryIndexManager;
 import org.apache.maven.indexer.examples.indexing.RepositoryIndexer;
 import org.apache.maven.indexer.examples.indexing.RepositoryIndexerFactory;
-import org.codehaus.plexus.PlexusContainerException;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
+import java.io.File;
+import java.io.IOException;
+
 /**
  * This is a dummy artifact repository creator.
  *
@@ -53,13 +51,12 @@
 
     public RepositoryBooter()
     {
+        // no op
     }
 
     @PostConstruct
     public void initialize()
-            throws IOException,
-                   PlexusContainerException,
-                   ComponentLookupException
+        throws IOException
     {
         File repositoriesBaseDir = new File( "target/repositories" );
 
@@ -77,7 +74,7 @@
     }
 
     private void createLockFile( File repositoriesRootDir )
-            throws IOException
+        throws IOException
     {
         final File lockFile = new File( repositoriesRootDir, "repositories.lock" );
         //noinspection ResultOfMethodCallIgnored
@@ -87,7 +84,7 @@
     }
 
     private boolean lockExists( File repositoriesRootDir )
-            throws IOException
+        throws IOException
     {
         File lockFile = new File( repositoriesRootDir, "repositories.lock" );
 
@@ -95,28 +92,22 @@
     }
 
     private void initializeRepositories( File repositoriesBaseDir )
-            throws IOException,
-                   PlexusContainerException,
-                   ComponentLookupException
+        throws IOException
     {
         initializeRepository( repositoriesBaseDir, "releases" );
         initializeRepository( repositoriesBaseDir, "snapshots" );
     }
 
-    private void initializeRepository( File repositoriesBaseDir,
-                                       String repositoryName )
-            throws IOException,
-                   PlexusContainerException,
-                   ComponentLookupException
+    private void initializeRepository( File repositoriesBaseDir, String repositoryName )
+        throws IOException
     {
         createRepositoryStructure( repositoriesBaseDir.getAbsolutePath(), repositoryName );
 
         initializeRepositoryIndex( new File( repositoriesBaseDir.getAbsoluteFile(), repositoryName ), repositoryName );
     }
 
-    public void createRepositoryStructure( String repositoriesBaseDir,
-                                           String repositoryName )
-            throws IOException
+    public void createRepositoryStructure( String repositoriesBaseDir, String repositoryName )
+        throws IOException
     {
         final File repositoriesBasedir = new File( repositoriesBaseDir );
         //noinspection ResultOfMethodCallIgnored
@@ -125,20 +116,16 @@
         new File( repositoriesBasedir, repositoryName + File.separatorChar + ".index" ).mkdirs();
 
         logger.debug( "Created directory structure for repository '" +
-                      repositoriesBasedir.getAbsolutePath() + File.separatorChar + repositoryName + "'." );
+                          repositoriesBasedir.getAbsolutePath() + File.separatorChar + repositoryName + "'." );
     }
 
-    private void initializeRepositoryIndex( File repositoryBasedir,
-                                            String repositoryId )
-            throws PlexusContainerException,
-                   ComponentLookupException,
-                   IOException
+    private void initializeRepositoryIndex( File repositoryBasedir, String repositoryId )
+        throws IOException
     {
         final File indexDir = new File( repositoryBasedir, ".index" );
 
-        RepositoryIndexer repositoryIndexer = repositoryIndexerFactory.createRepositoryIndexer( repositoryId,
-                                                                                                repositoryBasedir,
-                                                                                                indexDir );
+        RepositoryIndexer repositoryIndexer =
+            repositoryIndexerFactory.createRepositoryIndexer( repositoryId, repositoryBasedir, indexDir );
 
         repositoryIndexManager.addRepositoryIndex( repositoryId, repositoryIndexer );
     }
