You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2019/07/04 21:20:07 UTC

[maven-jxr] 05/06: [JXR-142] Switch to JSR330 Dependency Injection, [JXR-144] Require Maven 3.1.0

This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch JXR-142
in repository https://gitbox.apache.org/repos/asf/maven-jxr.git

commit 8b38211706911b9fd52ffbc8c44028e10e5c1e7f
Author: rfscholte <rf...@apache.org>
AuthorDate: Thu Jul 4 23:15:25 2019 +0200

    [JXR-142] Switch to JSR330 Dependency Injection,
    [JXR-144] Require Maven 3.1.0
---
 maven-jxr-plugin/pom.xml                           |   7 +-
 .../apache/maven/plugin/jxr/AbstractJxrReport.java |   5 +-
 .../apache/maven/plugin/jxr/PluginLogAdapter.java  |  68 ----------
 .../apache/maven/plugin/jxr/JxrTestReportTest.java |   6 -
 maven-jxr/pom.xml                                  |  34 ++++-
 .../org/apache/maven/jxr/DirectoryIndexer.java     |  22 +---
 .../src/main/java/org/apache/maven/jxr/JXR.java    |  42 +++---
 .../org/apache/maven/jxr/JavaCodeTransform.java    | 141 ++++++++++-----------
 .../main/java/org/apache/maven/jxr/log/Log.java    |  37 ------
 .../org/apache/maven/jxr/log/VelocityLogger.java   |  65 ----------
 .../org/apache/maven/jxr/pacman/FileManager.java   |  18 +--
 .../apache/maven/jxr/pacman/PackageManager.java    |  68 ++++------
 .../org/apache/maven/jxr/pacman/PackageType.java   |  12 +-
 .../org/apache/maven/jxr/DirectoryIndexerTest.java |  30 +++--
 .../test/java/org/apache/maven/jxr/DummyLog.java   |  52 --------
 .../org/apache/maven/jxr/IncludeExcludeTest.java   |  26 ++--
 .../test/java/org/apache/maven/jxr/JXR141Test.java |  20 +--
 .../apache/maven/jxr/JavaCodeTransformTest.java    |  30 ++---
 .../java/org/apache/maven/jxr/JxrBeanTest.java     |  22 ++--
 pom.xml                                            |   4 +-
 20 files changed, 231 insertions(+), 478 deletions(-)

diff --git a/maven-jxr-plugin/pom.xml b/maven-jxr-plugin/pom.xml
index 8e8917f..103b383 100644
--- a/maven-jxr-plugin/pom.xml
+++ b/maven-jxr-plugin/pom.xml
@@ -25,7 +25,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven.jxr</groupId>
     <artifactId>jxr</artifactId>
-    <version>3.0.1-SNAPSHOT</version>
+    <version>3.1.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.apache.maven.plugins</groupId>
@@ -36,7 +36,7 @@ under the License.
   <inceptionYear>2005</inceptionYear>
 
   <properties>
-    <mavenVersion>3.0</mavenVersion>
+    <mavenVersion>3.1.0</mavenVersion> <!-- support javax.inject -->
     <doxia-sitetoolsVersion>1.8</doxia-sitetoolsVersion>
     <doxiaVersion>1.8</doxiaVersion>
   </properties>
@@ -166,7 +166,7 @@ under the License.
     <dependency>
       <groupId>org.apache.maven.plugin-testing</groupId>
       <artifactId>maven-plugin-testing-harness</artifactId>
-      <version>2.1</version>
+      <version>3.0.0</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
@@ -189,7 +189,6 @@ under the License.
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-invoker-plugin</artifactId>
             <configuration>
-              <streamLogs>true</streamLogs><!-- TEMPORARY -->
               <projectsDirectory>src/it</projectsDirectory>
               <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
               <pomIncludes>
diff --git a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
index fa2085c..2f6586a 100644
--- a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
+++ b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
@@ -163,6 +163,9 @@ public abstract class AbstractJxrReport
     @Parameter( property = "javadocVersion" )
     private String javadocVersion;
 
+    @Component
+    private JXR jxr;
+    
     /**
      * Version of the Javadoc templates to use.
      */
@@ -264,7 +267,6 @@ public abstract class AbstractJxrReport
     private void createXref( Locale locale, String destinationDirectory, List<String> sourceDirs )
         throws IOException, JxrException, MavenReportException
     {
-        JXR jxr = new JXR();
         jxr.setDest( Paths.get( destinationDirectory ) );
         if ( StringUtils.isEmpty( inputEncoding ) )
         {
@@ -274,7 +276,6 @@ public abstract class AbstractJxrReport
         }
         jxr.setInputEncoding( inputEncoding );
         jxr.setLocale( locale );
-        jxr.setLog( new PluginLogAdapter( getLog() ) );
         jxr.setOutputEncoding( getOutputEncoding() );
         jxr.setRevision( "HEAD" );
         jxr.setJavadocLinkDir( getJavadocLocation() );
diff --git a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/PluginLogAdapter.java b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/PluginLogAdapter.java
deleted file mode 100644
index d0713a2..0000000
--- a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/PluginLogAdapter.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.apache.maven.plugin.jxr;
-
-/*
- * 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.maven.plugin.logging.Log;
-
-/**
- * Logging adapter.
- *
- * @author <a href="mailto:brett.NO-SPAM@apache.org">Brett Porter</a>
- * @version $Id$
- */
-public class PluginLogAdapter
-    implements org.apache.maven.jxr.log.Log
-{
-    private final Log log;
-
-    /**
-     * Class constructor
-     *
-     * @param log   the Log object to be used
-     */
-    public PluginLogAdapter( Log log )
-    {
-        this.log = log;
-    }
-
-    @Override
-    public void info( String string )
-    {
-        log.info( string );
-    }
-
-    @Override
-    public void debug( String string )
-    {
-        log.debug( string );
-    }
-
-    @Override
-    public void warn( String string )
-    {
-        log.warn( string );
-    }
-
-    @Override
-    public void error( String string )
-    {
-        log.error( string );
-    }
-}
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrTestReportTest.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrTestReportTest.java
index a089758..63098ec 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrTestReportTest.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrTestReportTest.java
@@ -32,12 +32,6 @@ import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 public class JxrTestReportTest
     extends AbstractMojoTestCase
 {
-    protected void setUp()
-        throws Exception
-    {
-        super.setUp();
-    }
-
     /**
      * Method to test when the source dir is the test source dir
      *
diff --git a/maven-jxr/pom.xml b/maven-jxr/pom.xml
index b64407f..3f5e81d 100644
--- a/maven-jxr/pom.xml
+++ b/maven-jxr/pom.xml
@@ -25,7 +25,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven.jxr</groupId>
     <artifactId>jxr</artifactId>
-    <version>3.0.1-SNAPSHOT</version>
+    <version>3.1.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.apache.maven</groupId>
@@ -69,13 +69,29 @@ under the License.
         </plugin>
       </plugins>
     </pluginManagement>
+    <plugins>
+        <plugin>
+          <groupId>org.eclipse.sisu</groupId>
+          <artifactId>sisu-maven-plugin</artifactId>
+          <version>0.3.3</version>
+          <executions>
+            <execution>
+              <id>index-project</id>
+              <goals>
+                <goal>main-index</goal>
+                <goal>test-index</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+    </plugins>
   </build>
 
   <dependencies>
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
+      <groupId>org.eclipse.sisu</groupId>
+      <artifactId>org.eclipse.sisu.plexus</artifactId>
+      <version>0.0.0.M2a</version> <!-- like Maven 3.1.0 -->
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
@@ -88,13 +104,19 @@ under the License.
 
     <dependency>
       <groupId>org.apache.velocity</groupId>
-      <artifactId>velocity</artifactId>
-      <version>1.5</version>
+      <artifactId>velocity-engine-core</artifactId>
+      <version>2.0</version>
     </dependency>
     <dependency>
       <groupId>commons-lang</groupId>
       <artifactId>commons-lang</artifactId>
       <version>2.6</version>
     </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java b/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
index 832b57f..8e4aea9 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
@@ -25,12 +25,9 @@ import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Enumeration;
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.apache.maven.jxr.log.Log;
-import org.apache.maven.jxr.log.VelocityLogger;
 import org.apache.maven.jxr.pacman.ClassType;
 import org.apache.maven.jxr.pacman.PackageManager;
 import org.apache.maven.jxr.pacman.PackageType;
@@ -210,13 +207,13 @@ public class DirectoryIndexer
      *
      * @throws JxrException If something went wrong
      */
-    public void process( Log log )
+    public void process()
         throws JxrException
     {
         ProjectInfo info = getProjectInfo();
 
         VelocityEngine engine = new VelocityEngine();
-        setProperties( engine, log );
+        setProperties( engine );
         try
         {
             engine.init();
@@ -252,7 +249,7 @@ public class DirectoryIndexer
     /*
      * Set Velocity properties to find templates
      */
-    private void setProperties( VelocityEngine engine, Log log )
+    private void setProperties( VelocityEngine engine )
     {
         Path templateDirFile = Paths.get( getTemplateDir() );
         if ( templateDirFile.isAbsolute() )
@@ -272,8 +269,8 @@ public class DirectoryIndexer
         }
         // avoid "unable to find resource 'VM_global_library.vm' in any resource loader."
         engine.setProperty( "velocimacro.library", "" );
-        engine.setProperty( Log.class.getName(), log );
-        engine.setProperty( "runtime.log.logsystem.class", VelocityLogger.class.getName() );
+//        engine.setProperty( Log.class.getName(), log );
+//        engine.setProperty( "runtime.log.logsystem.class", VelocityLogger.class.getName() );
     }
 
     /*
@@ -331,10 +328,8 @@ public class DirectoryIndexer
         Map<String, PackageInfo> allPackages = new TreeMap<>();
         Map<String, ClassInfo> allClasses = new TreeMap<>();
 
-        Enumeration<PackageType> packages = packageManager.getPackageTypes();
-        while ( packages.hasMoreElements() )
+        for ( PackageType pkg : packageManager.getPackageTypes() )
         {
-            PackageType pkg = packages.nextElement();
             String pkgName = pkg.getName();
             String pkgDir = pkgName.replace( '.', '/' );
             String rootRef = pkgName.replaceAll( "[^\\.]+(\\.|$)", "../" );
@@ -349,11 +344,8 @@ public class DirectoryIndexer
             }
 
             Map<String, ClassInfo> pkgClasses = new TreeMap<>();
-            Enumeration<ClassType> classes = pkg.getClassTypes();
-            while ( classes.hasMoreElements() )
+            for ( ClassType clazz : pkg.getClassTypes() )
             {
-                ClassType clazz = classes.nextElement();
-
                 String className = clazz.getName();
                 
                 ClassInfo classInfo = new ClassInfo( className, pkgDir );
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java b/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
index c87fcb9..a719ff0 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
@@ -20,9 +20,9 @@ package org.apache.maven.jxr;
  */
 
 import org.apache.maven.jxr.ant.DirectoryScanner;
-import org.apache.maven.jxr.log.Log;
 import org.apache.maven.jxr.pacman.FileManager;
 import org.apache.maven.jxr.pacman.PackageManager;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
 
 import java.io.IOException;
 import java.nio.file.Path;
@@ -30,19 +30,30 @@ import java.nio.file.Paths;
 import java.util.List;
 import java.util.Locale;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 /**
  * Main entry point into Maven used to kick off the XReference code building.
  *
  * @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
  * @version $Id$
  */
-public class JXR
+@Named
+@Singleton
+public class JXR extends AbstractLogEnabled
 {
+    @Inject
+    private PackageManager pkgmgr;
+
     /**
-     * The Log.
+     * Handles taking .java files and changing them into html. "More than meets
+     * the eye!" :)
      */
-    private Log log;
-
+    @Inject
+    private JavaCodeTransform transformer;
+    
     /**
      * The default list of include patterns to use.
      */
@@ -64,11 +75,6 @@ public class JXR
      */
     private Path javadocLinkDir;
 
-    /**
-     * Handles taking .java files and changing them into html. "More than meets
-     * the eye!" :)
-     */
-    private JavaCodeTransform transformer;
 
     /**
      * The revision of the module currently being processed.
@@ -96,8 +102,6 @@ public class JXR
     public void processPath( PackageManager packageManager, Path sourceDir, String bottom )
         throws IOException
     {
-        this.transformer = new JavaCodeTransform( packageManager );
-
         DirectoryScanner ds = new DirectoryScanner();
         // I'm not sure why we don't use the directoryScanner in packageManager,
         // but since we don't we need to set includes/excludes here as well
@@ -205,14 +209,6 @@ public class JXR
     }
 
     /**
-     * @param log
-     */
-    public void setLog( Log log )
-    {
-        this.log = log;
-    }
-
-    /**
      * @param sourceDirs
      * @param templateDir
      * @param windowTitle
@@ -228,7 +224,7 @@ public class JXR
         FileManager fileManager = new FileManager();
         fileManager.setEncoding( inputEncoding );
 
-        PackageManager pkgmgr = new PackageManager( log, fileManager );
+        
         pkgmgr.setExcludes( excludes );
         pkgmgr.setIncludes( includes );
 
@@ -249,7 +245,7 @@ public class JXR
         indexer.setWindowTitle( windowTitle );
         indexer.setDocTitle( docTitle );
         indexer.setBottom( bottom );
-        indexer.process( log );
+        indexer.process();
     }
 
     // ----------------------------------------------------------------------
@@ -267,7 +263,7 @@ public class JXR
     private void transform( Path sourceFile, Path destFile, String bottom )
         throws IOException
     {
-        log.debug( sourceFile + " -> " + destFile );
+        getLogger().debug( sourceFile + " -> " + destFile );
 
         // get a relative link to the javadocs
         Path javadoc = javadocLinkDir != null ? getRelativeLink( destFile.getParent(), javadocLinkDir ) : null;
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java b/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
index 8102e6f..106280f 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
@@ -61,8 +61,13 @@ import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.Set;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 /**
  * Syntax highlights java by turning it into html. A codeviewer object is created and then keeps state as lines are
  * passed in. Each line passed in as java test, is returned as syntax highlighted html text. Users of the class can set
@@ -90,6 +95,8 @@ import java.util.Set;
  *                                  importFilter
  * </pre>
  */
+@Named
+@Singleton
 public class JavaCodeTransform
     implements Serializable
 {
@@ -166,7 +173,7 @@ public class JavaCodeTransform
     /**
      * HashTable containing java reserved words
      */
-    private Hashtable<String, String> reservedWords = new Hashtable<>();
+    private Map<String, String> reservedWords = new Hashtable<>();
 
     /**
      * flag set to true when a multi-line comment is started
@@ -211,27 +218,71 @@ public class JavaCodeTransform
     /**
      * Package Manager for this project.
      */
+    @Inject
     private PackageManager packageManager;
 
     /**
      * current file manager
      */
+    @Inject
     private FileManager fileManager;
 
-    // ----------------------------------------------------------------------
-    // constructor
-    // ----------------------------------------------------------------------
-
-    /**
-     * Constructor for the JavaCodeTransform object
-     *
-     * @param packageManager PackageManager for this project
-     */
-    public JavaCodeTransform( PackageManager packageManager )
     {
-        this.packageManager = packageManager;
-        loadHash();
-        this.fileManager = packageManager.getFileManager();
+        reservedWords.put( "abstract", "abstract" );
+        reservedWords.put( "do", "do" );
+        reservedWords.put( "inner", "inner" );
+        reservedWords.put( "public", "public" );
+        reservedWords.put( "var", "var" );
+        reservedWords.put( "boolean", "boolean" );
+        reservedWords.put( "continue", "continue" );
+        reservedWords.put( "int", "int" );
+        reservedWords.put( "return", "return" );
+        reservedWords.put( "void", "void" );
+        reservedWords.put( "break", "break" );
+        reservedWords.put( "else", "else" );
+        reservedWords.put( "interface", "interface" );
+        reservedWords.put( "short", "short" );
+        reservedWords.put( "volatile", "volatile" );
+        reservedWords.put( "byvalue", "byvalue" );
+        reservedWords.put( "extends", "extends" );
+        reservedWords.put( "long", "long" );
+        reservedWords.put( "static", "static" );
+        reservedWords.put( "while", "while" );
+        reservedWords.put( "case", "case" );
+        reservedWords.put( "final", "final" );
+        reservedWords.put( "native", "native" );
+        reservedWords.put( "super", "super" );
+        reservedWords.put( "transient", "transient" );
+        reservedWords.put( "cast", "cast" );
+        reservedWords.put( "float", "float" );
+        reservedWords.put( "new", "new" );
+        reservedWords.put( "rest", "rest" );
+        reservedWords.put( "catch", "catch" );
+        reservedWords.put( "for", "for" );
+        reservedWords.put( "null", "null" );
+        reservedWords.put( "synchronized", "synchronized" );
+        reservedWords.put( "char", "char" );
+        reservedWords.put( "finally", "finally" );
+        reservedWords.put( "operator", "operator" );
+        reservedWords.put( "this", "this" );
+        reservedWords.put( "class", "class" );
+        reservedWords.put( "generic", "generic" );
+        reservedWords.put( "outer", "outer" );
+        reservedWords.put( "switch", "switch" );
+        reservedWords.put( "const", "const" );
+        reservedWords.put( "goto", "goto" );
+        reservedWords.put( "package", "package" );
+        reservedWords.put( "throw", "throw" );
+        reservedWords.put( "double", "double" );
+        reservedWords.put( "if", "if" );
+        reservedWords.put( "private", "private" );
+        reservedWords.put( "true", "true" );
+        reservedWords.put( "default", "default" );
+        reservedWords.put( "import", "import" );
+        reservedWords.put( "protected", "protected" );
+        reservedWords.put( "try", "try" );
+        reservedWords.put( "throws", "throws" );
+        reservedWords.put( "implements", "implements" );
     }
 
     // ----------------------------------------------------------------------
@@ -907,68 +958,6 @@ public class JavaCodeTransform
 
     /**
      * Description of the Method
-     */
-    private void loadHash()
-    {
-        reservedWords.put( "abstract", "abstract" );
-        reservedWords.put( "do", "do" );
-        reservedWords.put( "inner", "inner" );
-        reservedWords.put( "public", "public" );
-        reservedWords.put( "var", "var" );
-        reservedWords.put( "boolean", "boolean" );
-        reservedWords.put( "continue", "continue" );
-        reservedWords.put( "int", "int" );
-        reservedWords.put( "return", "return" );
-        reservedWords.put( "void", "void" );
-        reservedWords.put( "break", "break" );
-        reservedWords.put( "else", "else" );
-        reservedWords.put( "interface", "interface" );
-        reservedWords.put( "short", "short" );
-        reservedWords.put( "volatile", "volatile" );
-        reservedWords.put( "byvalue", "byvalue" );
-        reservedWords.put( "extends", "extends" );
-        reservedWords.put( "long", "long" );
-        reservedWords.put( "static", "static" );
-        reservedWords.put( "while", "while" );
-        reservedWords.put( "case", "case" );
-        reservedWords.put( "final", "final" );
-        reservedWords.put( "native", "native" );
-        reservedWords.put( "super", "super" );
-        reservedWords.put( "transient", "transient" );
-        reservedWords.put( "cast", "cast" );
-        reservedWords.put( "float", "float" );
-        reservedWords.put( "new", "new" );
-        reservedWords.put( "rest", "rest" );
-        reservedWords.put( "catch", "catch" );
-        reservedWords.put( "for", "for" );
-        reservedWords.put( "null", "null" );
-        reservedWords.put( "synchronized", "synchronized" );
-        reservedWords.put( "char", "char" );
-        reservedWords.put( "finally", "finally" );
-        reservedWords.put( "operator", "operator" );
-        reservedWords.put( "this", "this" );
-        reservedWords.put( "class", "class" );
-        reservedWords.put( "generic", "generic" );
-        reservedWords.put( "outer", "outer" );
-        reservedWords.put( "switch", "switch" );
-        reservedWords.put( "const", "const" );
-        reservedWords.put( "goto", "goto" );
-        reservedWords.put( "package", "package" );
-        reservedWords.put( "throw", "throw" );
-        reservedWords.put( "double", "double" );
-        reservedWords.put( "if", "if" );
-        reservedWords.put( "private", "private" );
-        reservedWords.put( "true", "true" );
-        reservedWords.put( "default", "default" );
-        reservedWords.put( "import", "import" );
-        reservedWords.put( "protected", "protected" );
-        reservedWords.put( "try", "try" );
-        reservedWords.put( "throws", "throws" );
-        reservedWords.put( "implements", "implements" );
-    }
-
-    /**
-     * Description of the Method
      *
      * @param oos ObjectOutputStream
      * @throws IOException
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/log/Log.java b/maven-jxr/src/main/java/org/apache/maven/jxr/log/Log.java
deleted file mode 100644
index 85d187f..0000000
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/log/Log.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.apache.maven.jxr.log;
-
-/*
- * 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.
- */
-
-/**
- * Logging interface.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @version $Id$
- */
-public interface Log
-{
-    void info( String message );
-
-    void debug( String message );
-
-    void warn( String message );
-
-    void error( String message );
-}
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/log/VelocityLogger.java b/maven-jxr/src/main/java/org/apache/maven/jxr/log/VelocityLogger.java
deleted file mode 100644
index 774caab..0000000
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/log/VelocityLogger.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.apache.maven.jxr.log;
-
-/*
- * 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.velocity.runtime.RuntimeServices;
-import org.apache.velocity.runtime.log.LogSystem;
-
-/**
- * Logging interface for Velocity.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @version $Id$
- */
-public class VelocityLogger
-    implements LogSystem
-{
-    private Log log;
-
-    @Override
-    public void init( RuntimeServices runtimeServices )
-    {
-        log = (Log) runtimeServices.getProperty( Log.class.getName() );
-    }
-
-    @Override
-    public void logVelocityMessage( int level, String msg )
-    {
-        switch ( level )
-        {
-            // velocity info messages are too verbose, just consider them as debug messages...
-            // case INFO_ID:
-            //    log.info( msg );
-            //    break;
-
-            case WARN_ID:
-                log.warn( msg );
-                break;
-
-            case ERROR_ID:
-                log.error( msg );
-                break;
-
-            default:
-                log.debug( msg );
-                break;
-        }
-    }
-}
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/FileManager.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/FileManager.java
index 03e2f4a..9f140b4 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/FileManager.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/FileManager.java
@@ -24,6 +24,9 @@ import java.nio.file.Path;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 /**
  * <p>
  *
@@ -35,26 +38,15 @@ import java.util.Map;
  * Note. This assumes that the file will not be modified on disk while
  * Alexandria is running. </p>
  */
+@Named
+@Singleton
 public class FileManager
 {
-    /**
-     * The Singleton instance of this FileManager
-     */
-    private static FileManager instance = new FileManager();
-
     private Map<Path, JavaFile> files = new HashMap<>();
 
     private String encoding = null;
 
     /**
-     * Get an instance of the FileManager
-     */
-    public static FileManager getInstance()
-    {
-        return instance;
-    }
-
-    /**
      * Get a file from it's name. If the file does not exist within the
      * FileManager, create a new one and return it.
      */
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java
index 4330ede..3288dc2 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageManager.java
@@ -19,38 +19,44 @@ package org.apache.maven.jxr.pacman;
  * under the License.
  */
 
+import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.DirectoryScanner;
-import org.apache.maven.jxr.log.Log;
 
 import java.io.IOException;
 import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Enumeration;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Hashtable;
+import java.util.Map;
 import java.util.Set;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 /**
  * Given a list of directories, parse them out and store them as rendered
  * packages, classes, imports, etc.
  */
-public class PackageManager
+@Named
+@Singleton
+public class PackageManager extends AbstractLogEnabled
 {
-    private final Log log;
+    @Inject
+    private FileManager fileManager;
 
     private Set<Path> directories = new HashSet<>();
 
     /**
      * All the packages that have been parsed
      */
-    private Hashtable<String, PackageType> packages = new Hashtable<>();
+    private Map<String, PackageType> packages = new HashMap<>();
 
     /**
      * The default Java package.
      */
     private PackageType defaultPackage = new PackageType();
 
-    private FileManager fileManager;
 
     /**
      * The list of exclude patterns to use.
@@ -62,12 +68,6 @@ public class PackageManager
      */
     private String[] includes = { "**/*.java" };
 
-    public PackageManager( Log log, FileManager fileManager )
-    {
-        this.log = log;
-        this.fileManager = fileManager;
-    }
-
     /**
      * Given the name of a package (Ex: org.apache.maven.util) obtain it from
      * the PackageManager
@@ -95,21 +95,20 @@ public class PackageManager
     /**
      * Get all of the packages in the PackageManager
      */
-    public Enumeration<PackageType> getPackageTypes()
+    public Collection<PackageType> getPackageTypes()
     {
-        return packages.elements();
+        return packages.values();
     }
 
     /**
      * Parse out all the directories on which this depends.
      */
-    private void parse( String directory )
+    private void parse( Path baseDir )
     {
         // Go through each directory and get the java source 
         // files for this dir.
-        log.debug( "Scanning " + directory );
+        getLogger().debug( "Scanning " + baseDir );
         DirectoryScanner directoryScanner = new DirectoryScanner();
-        Path baseDir = Paths.get( directory );
         directoryScanner.setBasedir( baseDir.toFile() );
         directoryScanner.setExcludes( excludes );
         directoryScanner.setIncludes( includes );
@@ -117,7 +116,7 @@ public class PackageManager
 
         for ( String file : directoryScanner.getIncludedFiles() )
         {
-            log.debug( "parsing... " + file );
+            getLogger().debug( "parsing... " + file );
 
             //now parse out this file to get the packages/classname/etc
             try
@@ -161,7 +160,7 @@ public class PackageManager
     {
         if ( this.directories.add( directory ) )
         {
-            this.parse( directory.toString() );
+            this.parse( directory );
         }
     }
 
@@ -171,37 +170,20 @@ public class PackageManager
     public void dump()
     {
 
-        log.debug( "Dumping out PackageManager structure" );
+        getLogger().debug( "Dumping out PackageManager structure" );
 
-        Enumeration<PackageType> pts = this.getPackageTypes();
-
-        while ( pts.hasMoreElements() )
+        for ( PackageType current  : getPackageTypes() )
         {
-
-            //get the current package and print it.
-            PackageType current = pts.nextElement();
-
-            log.debug( current.getName() );
+            getLogger().debug( current.getName() );
 
             //get the classes under the package and print those too.
-            Enumeration<ClassType> classes = current.getClassTypes();
-
-            while ( classes.hasMoreElements() )
+            for ( ClassType currentClass  : current.getClassTypes() )
             {
-
-                ClassType currentClass = classes.nextElement();
-
-                log.debug( "\t" + currentClass.getName() );
-
+                getLogger().debug( '\t' + currentClass.getName() );
             }
         }
     }
 
-    public FileManager getFileManager()
-    {
-        return fileManager;
-    }
-
     public void setExcludes( String[] excludes )
     {
         this.excludes = excludes;
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageType.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageType.java
index 1dec357..9817a45 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageType.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageType.java
@@ -19,8 +19,9 @@ package org.apache.maven.jxr.pacman;
  * under the License.
  */
 
-import java.util.Enumeration;
-import java.util.Hashtable;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Represents a Java package and its subclasses.
@@ -29,7 +30,7 @@ public class PackageType
     extends BaseType
 {
 
-    private Hashtable<String, ClassType> classes = new Hashtable<String, ClassType>();
+    private Map<String, ClassType> classes = new HashMap<>();
 
     /**
      * Create a Java package
@@ -52,10 +53,9 @@ public class PackageType
     /**
      * Get all the known classes
      */
-    public Enumeration<ClassType> getClassTypes()
+    public Collection<ClassType> getClassTypes()
     {
-
-        return classes.elements();
+        return classes.values();
     }
 
     /**
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/DirectoryIndexerTest.java b/maven-jxr/src/test/java/org/apache/maven/jxr/DirectoryIndexerTest.java
index d3feff6..605655c 100644
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/DirectoryIndexerTest.java
+++ b/maven-jxr/src/test/java/org/apache/maven/jxr/DirectoryIndexerTest.java
@@ -1,8 +1,5 @@
 package org.apache.maven.jxr;
 
-import org.apache.maven.jxr.DirectoryIndexer.ClassInfo;
-import org.apache.maven.jxr.DirectoryIndexer.PackageInfo;
-import org.apache.maven.jxr.DirectoryIndexer.ProjectInfo;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -23,27 +20,32 @@ import org.apache.maven.jxr.DirectoryIndexer.ProjectInfo;
  * under the License.
  */
 
-import org.apache.maven.jxr.pacman.FileManager;
-import org.apache.maven.jxr.pacman.PackageManager;
-import org.junit.Test;
-
 import java.nio.file.Paths;
 import java.util.Iterator;
 import java.util.Map;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.apache.maven.jxr.DirectoryIndexer.ClassInfo;
+import org.apache.maven.jxr.DirectoryIndexer.PackageInfo;
+import org.apache.maven.jxr.DirectoryIndexer.ProjectInfo;
+import org.apache.maven.jxr.pacman.PackageManager;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusTestCase;
 
-public class DirectoryIndexerTest {
+public class DirectoryIndexerTest extends PlexusTestCase 
+{
+    @Override
+    protected void customizeContainerConfiguration( ContainerConfiguration configuration )
+    {
+        configuration.setClassPathScanning( "INDEX" );
+    }
+    
     /**
      * Parse the files in test/resources/jxr68 packages, ensure all are present in the allClasses Map,
      * in the correct order.
      */
-    @Test
-    public void testJXR_68()
+    public void testJXR_68() throws Exception
     {
-        FileManager fileManager = FileManager.getInstance();
-        PackageManager packageManager = new PackageManager( new DummyLog(), fileManager );
+        PackageManager packageManager = lookup( PackageManager.class );
         packageManager.process( Paths.get( "src/test/resources/jxr68" ) );
         DirectoryIndexer directoryIndexer = new DirectoryIndexer( packageManager, "" );
 
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/DummyLog.java b/maven-jxr/src/test/java/org/apache/maven/jxr/DummyLog.java
deleted file mode 100644
index 4e2340a..0000000
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/DummyLog.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.apache.maven.jxr;
-
-/*
- * 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.maven.jxr.log.Log;
-
-/**
- * Dummy logger.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @version $Id$
- */
-public class DummyLog
-    implements Log
-{
-    public void info( String message )
-    {
-        System.out.println( message );
-    }
-
-    public void debug( String message )
-    {
-        System.out.println( message );
-    }
-
-    public void warn( String message )
-    {
-        System.out.println( message );
-    }
-
-    public void error( String message )
-    {
-        System.out.println( message );
-    }
-}
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/IncludeExcludeTest.java b/maven-jxr/src/test/java/org/apache/maven/jxr/IncludeExcludeTest.java
index 5a80669..d203baa 100644
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/IncludeExcludeTest.java
+++ b/maven-jxr/src/test/java/org/apache/maven/jxr/IncludeExcludeTest.java
@@ -19,16 +19,13 @@ package org.apache.maven.jxr;
  * under the License.
  */
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Collections;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusTestCase;
 
 /**
  * Test include/exclude patterns.
@@ -36,22 +33,27 @@ import org.junit.Test;
  * @author <a href="mailto:dennisl@apache.org">Dennis Lundberg</a>
  * @version $Id$
  */
-public class IncludeExcludeTest
+public class IncludeExcludeTest extends PlexusTestCase  
 {
     private JXR jxr;
-
-    @Before
-    public void setUp()
+ 
+    @Override
+    protected void customizeContainerConfiguration( ContainerConfiguration configuration )
+    {
+        configuration.setClassPathScanning( "INDEX" );
+    }
+    
+    @Override
+    public void setUp() throws Exception
     {
-        jxr = new JXR();
+        super.setUp();
+        jxr = lookup( JXR.class );
         jxr.setDest( Paths.get( "target" ) );
         jxr.setInputEncoding( "ISO-8859-1" );
         jxr.setOutputEncoding( "ISO-8859-1" );
         jxr.setJavadocLinkDir( Paths.get( "." ) );
-        jxr.setLog( new DummyLog() );
     }
 
-    @Test
     public void testIncludeExclude()
         throws Exception
     {
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/JXR141Test.java b/maven-jxr/src/test/java/org/apache/maven/jxr/JXR141Test.java
index a73ecea..5937a50 100644
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/JXR141Test.java
+++ b/maven-jxr/src/test/java/org/apache/maven/jxr/JXR141Test.java
@@ -19,7 +19,6 @@ package org.apache.maven.jxr;
  * under the License.
  */
 
-import org.junit.Test;
 
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
@@ -27,20 +26,25 @@ import java.nio.file.Paths;
 import java.util.Collections;
 import java.util.List;
 
-import static org.junit.Assert.*;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusTestCase;
 
 /**
  * Simple unit-testtest that illustrates a line with more
  * than one "token" to replace
  */
-public class JXR141Test {
-
-    @Test
-    public void processPath() throws Exception
+public class JXR141Test extends PlexusTestCase 
+{
+    @Override
+    protected void customizeContainerConfiguration( ContainerConfiguration configuration )
+    {
+        configuration.setClassPathScanning( "INDEX" );
+    }
+    
+    public void testProcessPath() throws Exception
     {
-        JXR jxr = new JXR();
+        JXR jxr = lookup( JXR.class );
         jxr.setDest( Paths.get("target/jxr-141" ) );
-        jxr.setLog( new DummyLog() );
         jxr.setOutputEncoding( "UTF-8" );
         jxr.xref( Collections.singletonList( "src/test/resources/jxr141" ),"templates/jdk4",
                 "title", "title", "copyright" );
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/JavaCodeTransformTest.java b/maven-jxr/src/test/java/org/apache/maven/jxr/JavaCodeTransformTest.java
index 5c93306..1b1f37c 100644
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/JavaCodeTransformTest.java
+++ b/maven-jxr/src/test/java/org/apache/maven/jxr/JavaCodeTransformTest.java
@@ -19,44 +19,42 @@ package org.apache.maven.jxr;
  * under the License.
  */
 
-import static org.junit.Assert.assertTrue;
-
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Locale;
 
-import org.apache.maven.jxr.pacman.FileManager;
-import org.apache.maven.jxr.pacman.PackageManager;
-import org.junit.Before;
-import org.junit.Test;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusTestCase;
 
 /**
  * JUnit test for {@link JavaCodeTransform}.
  */
-public class JavaCodeTransformTest
+public class JavaCodeTransformTest extends PlexusTestCase
 {
     /** JavaCodeTransform object under test */
     private JavaCodeTransform codeTransform;
 
-    /***/
-    private PackageManager packageManager;
-
+    @Override
+    protected void customizeContainerConfiguration( ContainerConfiguration configuration )
+    {
+        configuration.setClassPathScanning( "INDEX" );
+    }
+    
     /**
      * Set up this test.
      */
-    @Before
-    public void setUp()
+    @Override
+    public void setUp() throws Exception
     {
-        packageManager = new PackageManager( new DummyLog(), new FileManager() );
-        codeTransform = new JavaCodeTransform( packageManager );
+        super.setUp();
+        codeTransform = lookup( JavaCodeTransform.class );
     }
 
     /**
      * Test basic transformation of a java source file.
      */
-    @Test
     public void testTransform()
         //test transforms its own sourcefile, so add some comments
         throws Exception // single line despite /*
@@ -74,7 +72,6 @@ public class JavaCodeTransformTest
     /**
      * Test what happens with an empty sourcefile.
      */
-    @Test
     public void testTransformWithEmptyClassFile()
         throws Exception
     {
@@ -89,7 +86,6 @@ public class JavaCodeTransformTest
     /**
      * Test proper handling of link
      */
-    @Test
     public void testLinkHandling()
         throws Exception
     {
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/JxrBeanTest.java b/maven-jxr/src/test/java/org/apache/maven/jxr/JxrBeanTest.java
index fcac23b..7ecefdf 100644
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/JxrBeanTest.java
+++ b/maven-jxr/src/test/java/org/apache/maven/jxr/JxrBeanTest.java
@@ -22,26 +22,30 @@ package org.apache.maven.jxr;
 import java.nio.file.Paths;
 import java.util.Collections;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusTestCase;
 
-public class JxrBeanTest
+public class JxrBeanTest extends PlexusTestCase
 {
-
     private JXR jxrBean;
 
-    @Before
-    public void setUp()
+    @Override
+    protected void customizeContainerConfiguration( ContainerConfiguration configuration )
+    {
+        configuration.setClassPathScanning( "INDEX" );
+    }
+    
+    @Override
+    public void setUp() throws Exception
     {
-        jxrBean = new JXR();
+        super.setUp();
+        jxrBean = lookup( JXR.class );
         jxrBean.setDest( Paths.get( "target" ) );
         jxrBean.setInputEncoding( "ISO-8859-1" );
         jxrBean.setOutputEncoding( "ISO-8859-1" );
         jxrBean.setJavadocLinkDir( Paths.get( "." ) );
-        jxrBean.setLog( new DummyLog() );
     }
 
-    @Test
     public void testXref()
         throws Exception
     {
diff --git a/pom.xml b/pom.xml
index e61a9f5..be2f7ec 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@ under the License.
 
   <groupId>org.apache.maven.jxr</groupId>
   <artifactId>jxr</artifactId>
-  <version>3.0.1-SNAPSHOT</version>
+  <version>3.1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>Maven JXR Parent</name>
@@ -89,7 +89,7 @@ under the License.
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <scope>test</scope>
-        <version>4.11</version>
+        <version>4.12</version>
       </dependency>
       <dependency>
         <groupId>org.codehaus.plexus</groupId>