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 2018/12/28 11:30:00 UTC

[maven-javadoc-plugin] branch master updated: Refactor Strings to Paths

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

rfscholte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-javadoc-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new b9d08e9  Refactor Strings to Paths
b9d08e9 is described below

commit b9d08e9ed358d0cfff89692946f02f668d5ab96f
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Dec 28 12:29:51 2018 +0100

    Refactor Strings to Paths
---
 .../maven/plugins/javadoc/AbstractJavadocMojo.java | 276 +++++++++++----------
 .../maven/plugins/javadoc/JavadocReport.java       |   7 +-
 .../apache/maven/plugins/javadoc/JavadocUtil.java  |  18 +-
 .../plugins/javadoc/resolver/ResourceResolver.java |  21 +-
 .../maven/plugins/javadoc/JavadocReportTest.java   |  10 +-
 .../maven/plugins/javadoc/JavadocUtilTest.java     |  12 +-
 .../AggregateProject1TestMavenProjectStub.java     |   2 +-
 .../AggregateProject2TestMavenProjectStub.java     |   2 +-
 .../DefaultConfigurationMavenProjectStub.java      |   2 +-
 .../stubs/DocfilesTestMavenProjectStub.java        |   2 +-
 .../stubs/JavadocJarArchiveConfigProjectStub.java  |   2 +-
 .../stubs/JavadocJarDefaultMavenProjectStub.java   |   2 +-
 .../JavadocJarFailOnErrorMavenProjectStub.java     |   2 +-
 .../JavadocJarInvalidDestdirMavenProjectStub.java  |   3 +-
 .../OptionsUmlautEncodingMavenProjectStub.java     |   2 +-
 .../javadoc/stubs/QuotedPathMavenProjectStub.java  |   2 +-
 .../stubs/SubpackagesTestMavenProjectStub.java     |   2 +-
 .../javadoc/stubs/TagletTestMavenProjectStub.java  |   2 +-
 18 files changed, 188 insertions(+), 181 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
index e7c8bbc..b3f344c 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
@@ -127,6 +127,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
 import java.util.StringTokenizer;
@@ -1988,11 +1989,11 @@ public abstract class AbstractJavadocMojo
             throw new MavenReportException( "Failed to generate javadoc options file: " + e.getMessage(), e );
         }
 
-        Map<String, Collection<String>> sourcePaths = getSourcePaths();
+        Map<String, Collection<Path>> sourcePaths = getSourcePaths();
         
-        Collection<String> collectedSourcePaths = collect( sourcePaths.values() );
+        Collection<Path> collectedSourcePaths = collect( sourcePaths.values() );
         
-        List<String> files = getFiles( collectedSourcePaths );
+        Map<Path, Collection<String>> files = getFiles( collectedSourcePaths );
         if ( !canGenerateReport( files ) )
         {
             return;
@@ -2020,9 +2021,9 @@ public abstract class AbstractJavadocMojo
         }
         else
         {
-            packageNames = getPackageNames( collectedSourcePaths, files );
+            packageNames = getPackageNames( files );
         }
-        List<String> filesWithUnnamedPackages = getFilesWithUnnamedPackages( collectedSourcePaths, files );
+        List<String> filesWithUnnamedPackages = getFilesWithUnnamedPackages( files );
 
         // ----------------------------------------------------------------------
         // Javadoc output directory as File
@@ -2135,10 +2136,19 @@ public abstract class AbstractJavadocMojo
             // ----------------------------------------------------------------------
             // Write argfile file and include it in the command line
             // ----------------------------------------------------------------------
+            
+            List<String> allFiles = new ArrayList<>();
+            for ( Map.Entry<Path, Collection<String>> filesEntry : files.entrySet() )
+            {
+                for ( String file : filesEntry.getValue() )
+                {
+                    allFiles.add( filesEntry.getKey().resolve( file ).toString() );
+                }
+            }
 
             if ( !files.isEmpty() )
             {
-                addCommandLineArgFile( cmd, javadocOutputDirectory, files );
+                addCommandLineArgFile( cmd, javadocOutputDirectory, allFiles );
             }
         }
 
@@ -2199,10 +2209,10 @@ public abstract class AbstractJavadocMojo
         }
     }
 
-    protected final Collection<String> collect( Collection<Collection<String>> sourcePaths )
+    protected final <T> Collection<T> collect( Collection<Collection<T>> sourcePaths )
     {
-        Collection<String> collectedSourcePaths = new LinkedHashSet<>();
-        for ( Collection<String> sp : sourcePaths )
+        Collection<T> collectedSourcePaths = new LinkedHashSet<>();
+        for ( Collection<T> sp : sourcePaths )
         {
             collectedSourcePaths.addAll( sp );
         }
@@ -2216,23 +2226,25 @@ public abstract class AbstractJavadocMojo
      * @return a List that contains the specific path for every source file
      * @throws MavenReportException {@link MavenReportException}
      */
-    protected List<String> getFiles( Collection<String> sourcePaths )
+    protected Map<Path, Collection<String>> getFiles( Collection<Path> sourcePaths )
         throws MavenReportException
     {
-        List<String> files = new ArrayList<>();
+        Map<Path, Collection<String>> mappedFiles = new LinkedHashMap<>( sourcePaths.size() );
         if ( StringUtils.isEmpty( subpackages ) )
         {
             Collection<String> excludedPackages = getExcludedPackages();
             
-            for ( String sourcePath : sourcePaths )
+            for ( Path sourcePath : sourcePaths )
             {
-                File sourceDirectory = new File( sourcePath );
+                List<String> files = new ArrayList<>();
+                File sourceDirectory = sourcePath.toFile();
                 files.addAll( JavadocUtil.getFilesFromSource( sourceDirectory, sourceFileIncludes, sourceFileExcludes,
                                                               excludedPackages ) );
+                mappedFiles.put( sourcePath, files );
             }
         }
 
-        return files;
+        return mappedFiles;
     }
 
     /**
@@ -2243,15 +2255,15 @@ public abstract class AbstractJavadocMojo
      * @throws MavenReportException {@link MavenReportException}
      * @see JavadocUtil#pruneDirs(MavenProject, Collection)
      */
-    protected Map<String, Collection<String>> getSourcePaths()
+    protected Map<String, Collection<Path>> getSourcePaths()
         throws MavenReportException
     {
-        Map<String, Collection<String>> mappedSourcePaths = new LinkedHashMap<>();
+        Map<String, Collection<Path>> mappedSourcePaths = new LinkedHashMap<>();
 
         if ( StringUtils.isEmpty( sourcepath ) )
         {
             
-            Set<String> sourcePaths =
+            Set<Path> sourcePaths =
                 new LinkedHashSet<>( JavadocUtil.pruneDirs( project, getProjectSourceRoots( project ) ) );
 
             if ( project.getExecutionProject() != null )
@@ -2269,7 +2281,7 @@ public abstract class AbstractJavadocMojo
                 File javadocDir = getJavadocDirectory();
                 if ( javadocDir.exists() && javadocDir.isDirectory() )
                 {
-                    Collection<String> l = JavadocUtil.pruneDirs( project, Collections.singletonList(
+                    Collection<Path> l = JavadocUtil.pruneDirs( project, Collections.singletonList(
                         getJavadocDirectory().getAbsolutePath() ) );
                     sourcePaths.addAll( l );
                 }
@@ -2288,7 +2300,7 @@ public abstract class AbstractJavadocMojo
                 {
                     if ( subProject != project )
                     {
-                        Collection<String> additionalSourcePaths = new ArrayList<>();
+                        Collection<Path> additionalSourcePaths = new ArrayList<>();
 
                         List<String> sourceRoots = getProjectSourceRoots( subProject );
 
@@ -2311,7 +2323,7 @@ public abstract class AbstractJavadocMojo
                             File javadocDir = new File( subProject.getBasedir(), javadocDirRelative );
                             if ( javadocDir.exists() && javadocDir.isDirectory() )
                             {
-                                Collection<String> l = JavadocUtil.pruneDirs( subProject, Collections.singletonList(
+                                Collection<Path> l = JavadocUtil.pruneDirs( subProject, Collections.singletonList(
                                         javadocDir.getAbsolutePath() ) );
                                 additionalSourcePaths.addAll( l );
                             }
@@ -2325,11 +2337,12 @@ public abstract class AbstractJavadocMojo
         }
         else
         {
-            Collection<String> sourcePaths = new ArrayList<>( Arrays.asList( JavadocUtil.splitPath( sourcepath ) ) );
-            sourcePaths = JavadocUtil.pruneDirs( project, sourcePaths );
+            Collection<Path> sourcePaths =
+                JavadocUtil.pruneDirs( project,
+                                       new ArrayList<>( Arrays.asList( JavadocUtil.splitPath( sourcepath ) ) ) );
             if ( getJavadocDirectory() != null )
             {
-                Collection<String> l = JavadocUtil.pruneDirs( project, Collections.singletonList(
+                Collection<Path> l = JavadocUtil.pruneDirs( project, Collections.singletonList(
                     getJavadocDirectory().getAbsolutePath() ) );
                 sourcePaths.addAll( l );
             }
@@ -2408,7 +2421,7 @@ public abstract class AbstractJavadocMojo
      * @return List of source paths.
      * @throws MavenReportException {@link MavenReportException}
      */
-    protected final Map<String, Collection<String>> getDependencySourcePaths()
+    protected final Map<String, Collection<Path>> getDependencySourcePaths()
         throws MavenReportException
     {
         try
@@ -2503,16 +2516,17 @@ public abstract class AbstractJavadocMojo
      * @param files the project files
      * @return a boolean that indicates whether javadoc report can be generated or not
      */
-    protected boolean canGenerateReport( List<String> files )
+    protected boolean canGenerateReport( Map<Path, Collection<String>> files )
     {
-        boolean canGenerate = true;
-
-        if ( files.isEmpty() && StringUtils.isEmpty( subpackages ) )
+        for ( Collection<String> filesValues : files.values() )
         {
-            canGenerate = false;
+            if ( !filesValues.isEmpty() )
+            {
+                return true;
+            }
         }
 
-        return canGenerate;
+        return !StringUtils.isEmpty( subpackages );
     }
 
     // ----------------------------------------------------------------------
@@ -2527,17 +2541,11 @@ public abstract class AbstractJavadocMojo
      * @return a String that contains the exclude argument that will be used by javadoc
      * @throws MavenReportException
      */
-    private String getExcludedPackages( Collection<String> sourceFolders )
+    private String getExcludedPackages( Collection<Path> sourcePaths )
         throws MavenReportException
     {
         List<String> excludedNames = null;
         
-        Collection<Path> sourcePaths = new ArrayList<>( sourceFolders.size() );
-        for ( String folder : sourceFolders )
-        {
-            sourcePaths.add( Paths.get( folder ) );
-        }
-
         if ( StringUtils.isNotEmpty( sourcepath ) && StringUtils.isNotEmpty( subpackages ) )
         {
             Collection<String> excludedPackages = getExcludedPackages();
@@ -2563,7 +2571,7 @@ public abstract class AbstractJavadocMojo
      *         string (colon (<code>:</code>) on Solaris or semi-colon (<code>;</code>) on Windows).
      * @see File#pathSeparator
      */
-    private String getSourcePath( Collection<String> sourcePaths )
+    private String getSourcePath( Collection<Path> sourcePaths )
     {
         String sourcePath = null;
 
@@ -3145,15 +3153,14 @@ public abstract class AbstractJavadocMojo
                 taglet.getTagletArtifact().getArtifactId() ) ) && ( StringUtils.isNotEmpty(
                 taglet.getTagletArtifact().getVersion() ) ) )
             {
-                pathParts.addAll( getArtifactsAbsolutePath( taglet.getTagletArtifact() ) );
-
-                pathParts = JavadocUtil.pruneFiles( pathParts );
+                pathParts.addAll( JavadocUtil.pruneFiles( getArtifactsAbsolutePath( taglet.getTagletArtifact() ) ) );
             }
             else if ( StringUtils.isNotEmpty( taglet.getTagletpath() ) )
             {
-                pathParts.add( taglet.getTagletpath() );
-
-                pathParts = JavadocUtil.pruneDirs( project, pathParts );
+                for ( Path dir : JavadocUtil.pruneDirs( project, Collections.singletonList( taglet.getTagletpath() ) ) )
+                {
+                    pathParts.add( dir.toString()  );
+                }
             }
         }
 
@@ -4346,9 +4353,42 @@ public abstract class AbstractJavadocMojo
      * @param files       not null
      * @return the list of package names for files in the sourcePaths
      */
-    private List<String> getPackageNames( Collection<String> sourcePaths, List<String> files )
+    private List<String> getPackageNames( Map<Path, Collection<String>> sourcePaths )
     {
-        return getPackageNamesOrFilesWithUnnamedPackages( sourcePaths, files, true );
+        List<String> returnList = new ArrayList<>();
+        
+        if ( !StringUtils.isEmpty( sourcepath ) )
+        {
+            return returnList;
+        }
+        
+        for ( Entry<Path, Collection<String>> currentPathEntry : sourcePaths.entrySet() )
+        {
+            for ( String currentFile : currentPathEntry.getValue() )
+            {
+                /*
+                 * Remove the miscellaneous files
+                 * http://docs.oracle.com/javase/1.4.2/docs/tooldocs/solaris/javadoc.html#unprocessed
+                 */
+                if ( currentFile.contains( "doc-files" ) )
+                {
+                    continue;
+                }
+        
+                int lastIndexOfSeparator = currentFile.lastIndexOf( "/" );
+                if ( lastIndexOfSeparator != -1 )
+                {
+                    String packagename = currentFile.substring( 0, lastIndexOfSeparator ).replace( '/', '.' );
+        
+                    if ( !returnList.contains( packagename ) )
+                    {
+                        returnList.add( packagename );
+                    }
+                }
+            }
+        }
+        
+        return returnList;
     }
 
     /**
@@ -4358,7 +4398,7 @@ public abstract class AbstractJavadocMojo
      * @see #getFiles
      * @see #getSourcePaths()
      */
-    private List<String> getPackageNamesRespectingJavaModules( Map<String, Collection<String>> allSourcePaths )
+    private List<String> getPackageNamesRespectingJavaModules( Map<String, Collection<Path>> allSourcePaths )
             throws MavenReportException
     {
         List<String> returnList = new ArrayList<>();
@@ -4369,7 +4409,7 @@ public abstract class AbstractJavadocMojo
         }
         LocationManager locationManager = new LocationManager();
 
-        for ( Collection<String> artifactSourcePaths: allSourcePaths.values() )
+        for ( Collection<Path> artifactSourcePaths: allSourcePaths.values() )
         {
             Set<String> exportedPackages = new HashSet<>();
             boolean exportAllPackages;
@@ -4404,40 +4444,28 @@ public abstract class AbstractJavadocMojo
                 exportAllPackages = true;
             }
             
-            for ( String currentFile : getFiles( artifactSourcePaths ) )
+            for ( Map.Entry<Path, Collection<String>> currentPathEntry : getFiles( artifactSourcePaths ).entrySet() )
             {
-                currentFile = currentFile.replace( '\\', '/' );
-
-                for ( String currentSourcePath : artifactSourcePaths )
+                for ( String currentFile : currentPathEntry.getValue() )
                 {
-                    currentSourcePath = currentSourcePath.replace( '\\', '/' );
-
-                    if ( currentFile.contains( currentSourcePath ) )
+                    /*
+                     * Remove the miscellaneous files
+                     * http://docs.oracle.com/javase/1.4.2/docs/tooldocs/solaris/javadoc.html#unprocessed
+                     */
+                    if ( currentFile.contains( "doc-files" ) )
                     {
-                        if ( !currentSourcePath.endsWith( "/" ) )
-                        {
-                            currentSourcePath += "/";
-                        }
-                        String packagename = currentFile.substring( currentSourcePath.length() + 1 );
+                        continue;
+                    }
 
-                        /*
-                         * Remove the miscellaneous files
-                         * http://docs.oracle.com/javase/1.4.2/docs/tooldocs/solaris/javadoc.html#unprocessed
-                         */
-                        if ( packagename.contains( "doc-files" ) )
-                        {
-                            continue;
-                        }
+                    int lastIndexOfSeparator = currentFile.lastIndexOf( File.separatorChar );
+                    if ( lastIndexOfSeparator != -1 )
+                    {
+                        String packagename =
+                            currentFile.substring( 0, lastIndexOfSeparator ).replace( File.separatorChar, '.' );
 
-                        if ( packagename.lastIndexOf( "/" ) != -1 )
+                        if ( exportAllPackages || exportedPackages.contains( packagename ) )
                         {
-                            packagename = packagename.substring( 0, packagename.lastIndexOf( "/" ) );
-                            packagename = packagename.replace( '/', '.' );
-
-                            if ( exportAllPackages || exportedPackages.contains( packagename ) )
-                            {
-                                returnList.add( packagename );
-                            }
+                            returnList.add( packagename );
                         }
                     }
                 }
@@ -4452,73 +4480,37 @@ public abstract class AbstractJavadocMojo
      * @param files       not null
      * @return a list files with unnamed package names for files in the sourcePaths
      */
-    private List<String> getFilesWithUnnamedPackages( Collection<String> sourcePaths, List<String> files )
-    {
-        return getPackageNamesOrFilesWithUnnamedPackages( sourcePaths, files, false );
-    }
-
-    /**
-     * @param sourcePaths     not null, containing absolute and relative paths
-     * @param files           not null, containing list of quoted files
-     * @param onlyPackageName boolean for only package name
-     * @return a list of package names or files with unnamed package names, depending the value of the unnamed flag
-     * @see #getFiles
-     * @see #getSourcePaths()
-     */
-    private List<String> getPackageNamesOrFilesWithUnnamedPackages( Collection<String> sourcePaths, List<String> files,
-                                                                    boolean onlyPackageName )
+    private List<String> getFilesWithUnnamedPackages( Map<Path, Collection<String>> sourcePaths )
     {
         List<String> returnList = new ArrayList<>();
-
+        
         if ( !StringUtils.isEmpty( sourcepath ) )
         {
             return returnList;
         }
-
-        for ( String currentFile : files )
+        
+        for ( Entry<Path, Collection<String>> currentPathEntry : sourcePaths.entrySet() )
         {
-            currentFile = currentFile.replace( '\\', '/' );
-
-            for ( String currentSourcePath : sourcePaths )
+            Path currentSourcePath = currentPathEntry.getKey();
+        
+            for ( String currentFile : currentPathEntry.getValue() )
             {
-                currentSourcePath = currentSourcePath.replace( '\\', '/' );
-
-                if ( !currentSourcePath.endsWith( "/" ) )
+                /*
+                 * Remove the miscellaneous files
+                 * http://docs.oracle.com/javase/1.4.2/docs/tooldocs/solaris/javadoc.html#unprocessed
+                 */
+                if ( currentFile.contains( "doc-files" ) )
                 {
-                    currentSourcePath += "/";
+                    continue;
                 }
-
-                if ( currentFile.contains( currentSourcePath ) )
+        
+                if ( currentFile.indexOf( File.separatorChar ) == -1 )
                 {
-                    String packagename = currentFile.substring( currentSourcePath.length() + 1 );
-
-                    /*
-                     * Remove the miscellaneous files
-                     * http://docs.oracle.com/javase/1.4.2/docs/tooldocs/solaris/javadoc.html#unprocessed
-                     */
-                    if ( packagename.contains( "doc-files" ) )
-                    {
-                        continue;
-                    }
-
-                    if ( onlyPackageName && packagename.lastIndexOf( "/" ) != -1 )
-                    {
-                        packagename = packagename.substring( 0, packagename.lastIndexOf( "/" ) );
-                        packagename = packagename.replace( '/', '.' );
-
-                        if ( !returnList.contains( packagename ) )
-                        {
-                            returnList.add( packagename );
-                        }
-                    }
-                    if ( !onlyPackageName && packagename.lastIndexOf( "/" ) == -1 )
-                    {
-                        returnList.add( currentFile );
-                    }
+                    returnList.add( currentSourcePath.resolve( currentFile ).toAbsolutePath().toString() );
                 }
             }
         }
-
+        
         return returnList;
     }
 
@@ -4595,10 +4587,16 @@ public abstract class AbstractJavadocMojo
             cmd.createArg().setValue( "@" + FILES_FILE_NAME );
         }
 
+        List<String> quotedFiles = new ArrayList<>( files.size() );
+        for ( String file : files )
+        {
+            quotedFiles.add( JavadocUtil.quotedPathArgument( file ) );
+        }
+        
         try
         {
             FileUtils.fileWrite( argfileFile.getAbsolutePath(), null /* platform encoding */,
-                                 StringUtils.join( files.iterator(), SystemUtils.LINE_SEPARATOR ) );
+                                 StringUtils.join( quotedFiles.iterator(), SystemUtils.LINE_SEPARATOR ) );
         }
         catch ( IOException e )
         {
@@ -4791,10 +4789,10 @@ public abstract class AbstractJavadocMojo
      */
     private void addJavadocOptions( File javadocOutputDirectory,
                                     List<String> arguments,
-                                    Map<String, Collection<String>> allSourcePaths )
+                                    Map<String, Collection<Path>> allSourcePaths )
         throws MavenReportException
     {
-        Collection<String> sourcePaths = collect( allSourcePaths.values() );
+        Collection<Path> sourcePaths = collect( allSourcePaths.values() );
         
         validateJavadocOptions();
 
@@ -4836,7 +4834,7 @@ public abstract class AbstractJavadocMojo
         Path moduleSourceDir = null;
         if ( allSourcePaths.size() > 1 )
         {
-            for ( Map.Entry<String, Collection<String>> projectSourcepaths : allSourcePaths.entrySet() )
+            for ( Map.Entry<String, Collection<Path>> projectSourcepaths : allSourcePaths.entrySet() )
             {
                 if ( reactorKeys.contains( projectSourcepaths.getKey() ) )
                 {
@@ -4885,7 +4883,11 @@ public abstract class AbstractJavadocMojo
             }
         }
 
-        List<String> roots = getProjectSourceRoots( getProject() );
+        Collection<Path> roots = new ArrayList<>();
+        for ( String path : getProjectSourceRoots( getProject() ) )
+        {
+            roots.add( Paths.get( path ) );
+        }
         
         File mainDescriptor = findMainDescriptor( roots );
 
@@ -5006,11 +5008,11 @@ public abstract class AbstractJavadocMojo
         }
     }
 
-    private File findMainDescriptor( Collection<String> roots )
+    private File findMainDescriptor( Collection<Path> roots )
     {
-        for ( String root : roots )
+        for ( Path root : roots )
         {
-            File descriptorFile = new File( root, "module-info.java" ).getAbsoluteFile();
+            File descriptorFile = root.resolve( "module-info.java" ).toAbsolutePath().toFile();
             if ( descriptorFile.exists() )
             {
                 return descriptorFile;
diff --git a/src/main/java/org/apache/maven/plugins/javadoc/JavadocReport.java b/src/main/java/org/apache/maven/plugins/javadoc/JavadocReport.java
index bbc034f..bdef0fb 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/JavadocReport.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/JavadocReport.java
@@ -20,9 +20,10 @@ package org.apache.maven.plugins.javadoc;
  */
 
 import java.io.File;
+import java.nio.file.Path;
 import java.util.Collection;
-import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.ResourceBundle;
 
 import org.apache.maven.doxia.siterenderer.RenderingContext;
@@ -228,8 +229,8 @@ public class JavadocReport
 
         if ( this.isAggregator() || !"pom".equals( this.project.getPackaging() ) )
         {
-            Collection<String> sourcePaths;
-            List<String> files;
+            Collection<Path> sourcePaths;
+            Map<Path, Collection<String>> files;
             try
             {
                 sourcePaths = collect( getSourcePaths().values() );
diff --git a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
index 2e24e06..f56da63 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
@@ -125,9 +125,11 @@ public class JavadocUtil
      * @param dirs the collection of <code>String</code> directories path that will be validated.
      * @return a List of valid <code>String</code> directories absolute paths.
      */
-    public static Collection<String> pruneDirs( MavenProject project, Collection<String> dirs )
+    public static Collection<Path> pruneDirs( MavenProject project, Collection<String> dirs )
     {
-        Set<String> pruned = new LinkedHashSet<>( dirs.size() );
+        final Path projectBasedir = project.getBasedir().toPath();
+        
+        Set<Path> pruned = new LinkedHashSet<>( dirs.size() );
         for ( String dir : dirs )
         {
             if ( dir == null )
@@ -135,15 +137,11 @@ public class JavadocUtil
                 continue;
             }
 
-            File directory = new File( dir );
-            if ( !directory.isAbsolute() )
-            {
-                directory = new File( project.getBasedir(), directory.getPath() );
-            }
+            Path directory = projectBasedir.resolve( dir );
 
-            if ( directory.isDirectory() )
+            if ( Files.isDirectory( directory ) )
             {
-                pruned.add( directory.getAbsolutePath() );
+                pruned.add( directory.toAbsolutePath() );
             }
         }
 
@@ -470,7 +468,7 @@ public class JavadocUtil
         {
             for ( String includedFile : getIncludedFiles( sourceDirectory, fileList, excludePackages ) )
             {
-                files.add( quotedPathArgument( new File( sourceDirectory, includedFile ).getAbsolutePath() ) );
+                files.add( includedFile );
             }
         }
 
diff --git a/src/main/java/org/apache/maven/plugins/javadoc/resolver/ResourceResolver.java b/src/main/java/org/apache/maven/plugins/javadoc/resolver/ResourceResolver.java
index 5e3eeda..99034b2 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/resolver/ResourceResolver.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/resolver/ResourceResolver.java
@@ -24,6 +24,7 @@ import static org.codehaus.plexus.util.IOUtil.close;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.nio.file.Path;
 import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -148,10 +149,10 @@ public final class ResourceResolver extends AbstractLogEnabled
      * @throws ArtifactResolutionException {@link ArtifactResolutionException}
      * @throws ArtifactNotFoundException {@link ArtifactNotFoundException}
      */
-    public Map<String, Collection<String>> resolveDependencySourcePaths( final SourceResolverConfig config )
+    public Map<String, Collection<Path>> resolveDependencySourcePaths( final SourceResolverConfig config )
         throws ArtifactResolutionException, ArtifactNotFoundException
     {
-        final Map<String, Collection<String>> mappedDirs = new LinkedHashMap<>();
+        final Map<String, Collection<Path>> mappedDirs = new LinkedHashMap<>();
         
         final Map<String, MavenProject> projectMap = new HashMap<>();
         if ( config.reactorProjects() != null )
@@ -179,7 +180,7 @@ public final class ResourceResolver extends AbstractLogEnabled
             }
         }
 
-        for ( Map.Entry<String, String> entry : resolveFromArtifacts( config, forResourceResolution ) )
+        for ( Map.Entry<String, Path> entry : resolveFromArtifacts( config, forResourceResolution ) )
         {
             mappedDirs.put( entry.getKey(), Collections.singletonList( entry.getValue() ) );
         }
@@ -271,10 +272,10 @@ public final class ResourceResolver extends AbstractLogEnabled
         List<String> dirs = new ArrayList<>( toResolve.size() );
         try
         {
-            for ( Map.Entry<String, String> entry : resolveAndUnpack( toResolve, config, RESOURCE_VALID_CLASSIFIERS,
+            for ( Map.Entry<String, Path> entry : resolveAndUnpack( toResolve, config, RESOURCE_VALID_CLASSIFIERS,
                                                                       false ) )
             {
-                dirs.add( entry.getValue() );
+                dirs.add( entry.getValue().toString() );
             }
         }
         catch ( ArtifactResolutionException | ArtifactNotFoundException e )
@@ -313,7 +314,7 @@ public final class ResourceResolver extends AbstractLogEnabled
         return result;
     }
 
-    private Collection<Entry<String, String>> resolveFromArtifacts( final SourceResolverConfig config,
+    private Collection<Entry<String, Path>> resolveFromArtifacts( final SourceResolverConfig config,
                                                       final List<Artifact> artifacts )
         throws ArtifactResolutionException, ArtifactNotFoundException
     {
@@ -365,7 +366,7 @@ public final class ResourceResolver extends AbstractLogEnabled
      * @throws ArtifactResolutionException if an exception occurs
      * @throws ArtifactNotFoundException if an exception occurs
      */
-    private Collection<Map.Entry<String, String>> resolveAndUnpack( final List<Artifact> artifacts,
+    private Collection<Map.Entry<String, Path>> resolveAndUnpack( final List<Artifact> artifacts,
                                                                     final SourceResolverConfig config,
                                                                     final List<String> validClassifiers,
                                                                     final boolean propagateErrors )
@@ -386,7 +387,7 @@ public final class ResourceResolver extends AbstractLogEnabled
             filter = null;
         }
         
-        final List<Map.Entry<String, String>> result = new ArrayList<>( artifacts.size() );
+        final List<Map.Entry<String, Path>> result = new ArrayList<>( artifacts.size() );
         for ( final Artifact a : artifactSet )
         {
             if ( !validClassifiers.contains( a.getClassifier() ) || ( filter != null && !filter.include( a ) ) )
@@ -421,7 +422,7 @@ public final class ResourceResolver extends AbstractLogEnabled
 
                 unArchiver.extract();
 
-                result.add( new AbstractMap.SimpleEntry<>( a.getDependencyConflictId(), d.getAbsolutePath() ) );
+                result.add( new AbstractMap.SimpleEntry<>( a.getDependencyConflictId(), d.toPath().toAbsolutePath() ) );
             }
             catch ( final NoSuchArchiverException e )
             {
@@ -443,7 +444,7 @@ public final class ResourceResolver extends AbstractLogEnabled
         return result;
     }
 
-    private static Collection<String> resolveFromProject( final SourceResolverConfig config,
+    private static Collection<Path> resolveFromProject( final SourceResolverConfig config,
                                                     final MavenProject reactorProject, final Artifact artifact )
     {
         final List<String> dirs = new ArrayList<>();
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java b/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java
index 46358ab..0afc13e 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java
@@ -345,11 +345,11 @@ public class JavadocReportTest
         File apidocs = new File( getBasedir(), "target/test/unit/docfiles-test/target/site/apidocs/" );
 
         // check if the doc-files subdirectories were copied
-        assertTrue( new File( apidocs, "doc-files" ).exists() );
-        assertTrue( new File( apidocs, "doc-files/included-dir1/sample-included1.gif" ).exists() );
-        assertTrue( new File( apidocs, "doc-files/included-dir2/sample-included2.gif" ).exists() );
-        assertFalse( new File( apidocs, "doc-files/excluded-dir1" ).exists() );
-        assertFalse( new File( apidocs, "doc-files/excluded-dir2" ).exists() );
+        assertTrue( new File( apidocs, "docfiles/test/doc-files" ).exists() );
+        assertTrue( new File( apidocs, "docfiles/test/doc-files/included-dir1/sample-included1.gif" ).exists() );
+        assertTrue( new File( apidocs, "docfiles/test/doc-files/included-dir2/sample-included2.gif" ).exists() );
+        assertFalse( new File( apidocs, "docfiles/test/doc-files/excluded-dir1" ).exists() );
+        assertFalse( new File( apidocs, "docfiles/test/doc-files/excluded-dir2" ).exists() );
 
         testPom = new File( unit, "docfiles-with-java-test/docfiles-with-java-test-plugin-config.xml" );
         mojo = lookupMojo( testPom );
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
index 139a09f..79b94ba 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
@@ -28,6 +28,8 @@ import java.io.OutputStream;
 import java.net.SocketTimeoutException;
 import java.net.URI;
 import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -42,7 +44,9 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
 import org.apache.maven.plugins.javadoc.ProxyServer.AuthAsyncProxyServlet;
+import org.apache.maven.project.MavenProject;
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Settings;
 import org.codehaus.plexus.PlexusTestCase;
@@ -739,10 +743,12 @@ public class JavadocUtilTest
         list.add( getBasedir() + "/target/classes" );
         list.add( getBasedir() + "/target/classes" );
 
-        String FS = System.getProperty( "file.separator" );
-        Set<String> expected = Collections.singleton( getBasedir() + FS +"target" + FS + "classes" );
+        Set<Path> expected = Collections.singleton( Paths.get( getBasedir(), "target/classes" ) );
+        
+        MavenProjectStub project = new MavenProjectStub();
+        project.setFile( new File( getBasedir(), "pom.xml" ) );
 
-        assertEquals( expected, JavadocUtil.pruneDirs( null, list ) );
+        assertEquals( expected, JavadocUtil.pruneDirs( project, list ) );
     }
 
     /**
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateProject1TestMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateProject1TestMavenProjectStub.java
index 9ac1241..8f7263b 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateProject1TestMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateProject1TestMavenProjectStub.java
@@ -54,7 +54,7 @@ public class AggregateProject1TestMavenProjectStub
 
         String basedir = getBasedir().getAbsolutePath();
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( basedir + "/aggregate/test/project1" );
+        compileSourceRoots.add( basedir );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateProject2TestMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateProject2TestMavenProjectStub.java
index 045bf3d..5b51e76 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateProject2TestMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateProject2TestMavenProjectStub.java
@@ -54,7 +54,7 @@ public class AggregateProject2TestMavenProjectStub
 
         String basedir = getBasedir().getAbsolutePath();
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( basedir + "/aggregate/test/project2" );
+        compileSourceRoots.add( basedir );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/DefaultConfigurationMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/DefaultConfigurationMavenProjectStub.java
index bbe7ad0..9db73d6 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/DefaultConfigurationMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/DefaultConfigurationMavenProjectStub.java
@@ -57,7 +57,7 @@ public class DefaultConfigurationMavenProjectStub
         setBuild( build );
 
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( getBasedir() + "/def/configuration" );
+        compileSourceRoots.add( getBasedir().getAbsolutePath() );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/DocfilesTestMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/DocfilesTestMavenProjectStub.java
index 86c15ac..52018c5 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/DocfilesTestMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/DocfilesTestMavenProjectStub.java
@@ -58,7 +58,7 @@ public class DocfilesTestMavenProjectStub
         setBuild( build );
 
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( getBasedir() + "/docfiles/test" );
+        compileSourceRoots.add( getBasedir().getAbsolutePath() );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarArchiveConfigProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarArchiveConfigProjectStub.java
index 398c25a..95f1928 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarArchiveConfigProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarArchiveConfigProjectStub.java
@@ -66,7 +66,7 @@ public class JavadocJarArchiveConfigProjectStub
         setBuild( build );
 
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( getBasedir() + "/javadocjar/def" );
+        compileSourceRoots.add( getBasedir().getAbsolutePath() );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarDefaultMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarDefaultMavenProjectStub.java
index d60ba81..4a5fd46 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarDefaultMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarDefaultMavenProjectStub.java
@@ -64,7 +64,7 @@ public class JavadocJarDefaultMavenProjectStub
         setBuild( build );
 
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( getBasedir() + "/javadocjar/def" );
+        compileSourceRoots.add( getBasedir().getAbsolutePath() );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarFailOnErrorMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarFailOnErrorMavenProjectStub.java
index ff0f6cd..8eba1ec 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarFailOnErrorMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarFailOnErrorMavenProjectStub.java
@@ -64,7 +64,7 @@ public class JavadocJarFailOnErrorMavenProjectStub
         setBuild( build );
 
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( getBasedir() + "/javadocjar/def" );
+        compileSourceRoots.add( getBasedir().getAbsolutePath() );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarInvalidDestdirMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarInvalidDestdirMavenProjectStub.java
index 59e9bd9..28b8a18 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarInvalidDestdirMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/JavadocJarInvalidDestdirMavenProjectStub.java
@@ -63,8 +63,7 @@ public class JavadocJarInvalidDestdirMavenProjectStub
         setBuild( build );
 
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add(
-            getBasedir() + "/javadocjar/invalid/destdir" );
+        compileSourceRoots.add( getBasedir().getAbsolutePath() );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/OptionsUmlautEncodingMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/OptionsUmlautEncodingMavenProjectStub.java
index a38d7ce..f1db35c 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/OptionsUmlautEncodingMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/OptionsUmlautEncodingMavenProjectStub.java
@@ -53,7 +53,7 @@ public class OptionsUmlautEncodingMavenProjectStub
         setBuild( build );
 
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( getBasedir() + "/optionsumlautencoding/test" );
+        compileSourceRoots.add( getBasedir().getAbsolutePath() );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/QuotedPathMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/QuotedPathMavenProjectStub.java
index a3c0b6e..097fbfc 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/QuotedPathMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/QuotedPathMavenProjectStub.java
@@ -57,7 +57,7 @@ public class QuotedPathMavenProjectStub
         setBuild( build );
 
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( getBasedir() + "/quotedpath/test" );
+        compileSourceRoots.add( getBasedir().getAbsolutePath() );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/SubpackagesTestMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/SubpackagesTestMavenProjectStub.java
index 5213f93..1e26185 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/SubpackagesTestMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/SubpackagesTestMavenProjectStub.java
@@ -57,7 +57,7 @@ public class SubpackagesTestMavenProjectStub
         setBuild( build );
 
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( getBasedir() + "/subpackages/test" );
+        compileSourceRoots.add( getBasedir().getAbsolutePath() );
         setCompileSourceRoots( compileSourceRoots );
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/stubs/TagletTestMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/javadoc/stubs/TagletTestMavenProjectStub.java
index d1c4c35..919bc8b 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/stubs/TagletTestMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/stubs/TagletTestMavenProjectStub.java
@@ -57,7 +57,7 @@ public class TagletTestMavenProjectStub
         setBuild( build );
 
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add( getBasedir() + "/taglet/test" );
+        compileSourceRoots.add( getBasedir().getAbsolutePath() );
         setCompileSourceRoots( compileSourceRoots );
     }