You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2011/08/21 02:18:42 UTC

svn commit: r1159926 - in /maven/archetype/trunk: archetype-common/src/main/java/org/apache/maven/archetype/ archetype-common/src/main/java/org/apache/maven/archetype/common/ archetype-common/src/main/java/org/apache/maven/archetype/generator/ maven-ar...

Author: hboutemy
Date: Sun Aug 21 00:18:42 2011
New Revision: 1159926

URL: http://svn.apache.org/viewvc?rev=1159926&view=rev
Log:
[ARCHETYPE-289] add empty directory support (restricted to non-filtered filesets for the moment)

Added:
    maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/src/main/resources/archetype-resources/src/main/resources/empty-directory/
Modified:
    maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
    maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
    maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java
    maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
    maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/pom.xml
    maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
    maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/verify.bsh

Modified: maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java?rev=1159926&r1=1159925&r2=1159926&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java (original)
+++ maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java Sun Aug 21 00:18:42 2011
@@ -118,6 +118,19 @@ public class DefaultArchetypeManager
     {
         File[] files = currentSourceDirectory.listFiles();
 
+        if ( files.length == 0 )
+        {
+            // add an empty directory
+            String dirName = currentSourceDirectory.getAbsolutePath().substring( offset + 1 );
+
+            if ( File.separatorChar != '/' )
+            {
+                dirName = dirName.replace( '\\', '/' );
+            }
+
+            zos.putNextEntry( new ZipEntry( dirName + '/' ) );
+        }
+
         for ( int i = 0; i < files.length; i++ )
         {
             if ( files[i].isDirectory() )

Modified: maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java?rev=1159926&r1=1159925&r2=1159926&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java (original)
+++ maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java Sun Aug 21 00:18:42 2011
@@ -348,9 +348,9 @@ public class DefaultArchetypeArtifactMan
             {
                 ZipEntry entry = (ZipEntry) enumeration.nextElement();
 
-                if ( !entry.isDirectory() && entry.getName().startsWith( Constants.ARCHETYPE_RESOURCES ) )
+                if ( entry.getName().startsWith( Constants.ARCHETYPE_RESOURCES ) )
                 {
-                    // not supposed to be file.seperator
+                    // not supposed to be file.separator
                     String resource = entry.getName().substring( Constants.ARCHETYPE_RESOURCES.length() + 1 );
                     getLogger().debug( "  - found resource (" + Constants.ARCHETYPE_RESOURCES + "/)" + resource );
                     // TODO:FIXME

Modified: maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java?rev=1159926&r1=1159925&r2=1159926&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java (original)
+++ maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java Sun Aug 21 00:18:42 2011
@@ -60,6 +60,7 @@ public class DefaultArchetypeFilesResolv
 
         List<String> result = scanner.scan( files );
         getLogger().debug( "Scanned " + result.size() + " filtered files in " + files.size() + " files" );
+        System.out.println( "Scanned " + result.size() + " filtered files in " + files.size() + " files: " + StringUtils.join( result.iterator(), ", " ) );
 
         return result;
     }

Modified: maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java?rev=1159926&r1=1159925&r2=1159926&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java (original)
+++ maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java Sun Aug 21 00:18:42 2011
@@ -134,14 +134,11 @@ public class DefaultFilesetArchetypeGene
             File basedirPom = new File( request.getOutputDirectory(), Constants.ARCHETYPE_POM );
             File pom = new File( outputDirectoryFile, Constants.ARCHETYPE_POM );
 
-            List<String> archetypeResources =
-                archetypeArtifactManager.getFilesetArchetypeResources( archetypeFile );
+            List<String> archetypeResources = archetypeArtifactManager.getFilesetArchetypeResources( archetypeFile );
 
-            ZipFile archetypeZipFile =
-                archetypeArtifactManager.getArchetypeZipFile( archetypeFile );
+            ZipFile archetypeZipFile = archetypeArtifactManager.getArchetypeZipFile( archetypeFile );
 
-            ClassLoader archetypeJarLoader =
-                archetypeArtifactManager.getArchetypeJarLoader( archetypeFile );
+            ClassLoader archetypeJarLoader = archetypeArtifactManager.getArchetypeJarLoader( archetypeFile );
 
             Thread.currentThread().setContextClassLoader( archetypeJarLoader );
 
@@ -154,14 +151,11 @@ public class DefaultFilesetArchetypeGene
                     {
                         throw new PomFileExists( "This is a partial archetype and the pom.xml file doesn't exist." );
                     }
-                    else
-                    {
-                        processPomWithMerge( context, pom, "" );
 
-                        processArchetypeTemplatesWithWarning( archetypeDescriptor, archetypeResources,
-                                                              archetypeZipFile, "", context, packageName,
-                                                              outputDirectoryFile );
-                    }
+                    processPomWithMerge( context, pom, "" );
+
+                    processArchetypeTemplatesWithWarning( archetypeDescriptor, archetypeResources, archetypeZipFile,
+                                                          "", context, packageName, outputDirectoryFile );
                 }
                 else
                 {
@@ -195,18 +189,16 @@ public class DefaultFilesetArchetypeGene
                     throw new ProjectDirectoryExists( "A Maven 2 project already exists in the directory "
                         + outputDirectoryFile.getPath() );
                 }
-                else
+
+                if ( outputDirectoryFile.exists() )
                 {
-                    if ( outputDirectoryFile.exists() )
-                    {
-                        getLogger().warn( "The directory " + outputDirectoryFile.getPath() + " already exists." );
-                    }
+                    getLogger().warn( "The directory " + outputDirectoryFile.getPath() + " already exists." );
+                }
 
-                    context.put( "rootArtifactId", artifactId );
+                context.put( "rootArtifactId", artifactId );
 
-                    processFilesetModule( artifactId, artifactId, archetypeResources, pom, archetypeZipFile, "",
-                                          basedirPom, outputDirectoryFile, packageName, archetypeDescriptor, context );
-                }
+                processFilesetModule( artifactId, artifactId, archetypeResources, pom, archetypeZipFile, "",
+                                      basedirPom, outputDirectoryFile, packageName, archetypeDescriptor, context );
             }
 
             // ----------------------------------------------------------------------
@@ -252,7 +244,7 @@ public class DefaultFilesetArchetypeGene
         return StringUtils.replace( packageName, ".", "/" );
     }
 
-    private void copyFile( final File outFile, final String template, final boolean failIfExists,
+    private boolean copyFile( final File outFile, final String template, final boolean failIfExists,
                            final ZipFile archetypeZipFile )
         throws FileNotFoundException, OutputFileExists, IOException
     {
@@ -265,12 +257,18 @@ public class DefaultFilesetArchetypeGene
         else if ( outFile.exists() )
         {
             getLogger().warn( "CP Don't override file " + outFile );
+
+            return false;
+        }
+
+        ZipEntry input = archetypeZipFile.getEntry( Constants.ARCHETYPE_RESOURCES + "/" + template );
+
+        if ( input.isDirectory() )
+        {
+            outFile.mkdirs();
         }
         else
         {
-            ZipEntry input =
-                archetypeZipFile.getEntry( Constants.ARCHETYPE_RESOURCES + "/" + template );
-
             InputStream inputStream = null;
             OutputStream out = null;
             try
@@ -289,20 +287,29 @@ public class DefaultFilesetArchetypeGene
                 IOUtil.close( out );
             }
         }
+
+        return true;
     }
 
-    private void copyFiles( String directory, List<String> fileSetResources, boolean packaged, String packageName,
-                            File outputDirectoryFile, ZipFile archetypeZipFile, String moduleOffset,
-                            boolean failIfExists, Context context )
+    private int copyFiles( String directory, List<String> fileSetResources, boolean packaged, String packageName,
+                           File outputDirectoryFile, ZipFile archetypeZipFile, String moduleOffset,
+                           boolean failIfExists, Context context )
         throws OutputFileExists, FileNotFoundException, IOException
     {
+        int count = 0;
+
         for ( String template : fileSetResources )
         {
             File outputFile =
                 getOutputFile( template, directory, outputDirectoryFile, packaged, packageName, moduleOffset, context );
 
-            copyFile( outputFile, template, failIfExists, archetypeZipFile );
+            if ( copyFile( outputFile, template, failIfExists, archetypeZipFile ) )
+            {
+                count++;
+            }
         }
+
+        return count;
     }
 
     private String getEncoding( String archetypeEncoding )
@@ -329,9 +336,7 @@ public class DefaultFilesetArchetypeGene
             outputFileName = replaceFilenameTokens( outputFileName, context );
         }
 
-        File outputFile = new File( outputDirectoryFile, outputFileName );
-
-        return outputFile;
+        return new File( outputDirectoryFile, outputFileName );
     }
 
     /**
@@ -488,19 +493,26 @@ public class DefaultFilesetArchetypeGene
                           archetypeZipFile, moduleOffset, true );
     }
 
-    private void processFileSet( String directory, List<String> fileSetResources, boolean packaged, String packageName,
-                                 Context context, File outputDirectoryFile, String moduleOffset,
-                                 String archetypeEncoding, boolean failIfExists )
+    private int processFileSet( String directory, List<String> fileSetResources, boolean packaged, String packageName,
+                                Context context, File outputDirectoryFile, String moduleOffset,
+                                String archetypeEncoding, boolean failIfExists )
         throws OutputFileExists, ArchetypeGenerationFailure
     {
+        int count = 0;
+
         for ( String template : fileSetResources )
         {
             File outputFile =
                 getOutputFile( template, directory, outputDirectoryFile, packaged, packageName, moduleOffset, context );
 
-            processTemplate( outputFile, context, Constants.ARCHETYPE_RESOURCES + "/" + template, archetypeEncoding,
-                             failIfExists );
+            if ( processTemplate( outputFile, context, Constants.ARCHETYPE_RESOURCES + "/" + template,
+                                  archetypeEncoding, failIfExists ) )
+            {
+                count++;
+            }
         }
+
+        return count;
     }
 
     private void processFilesetModule( String rootArtifactId, String artifactId, final List<String> archetypeResources,
@@ -634,8 +646,8 @@ public class DefaultFilesetArchetypeGene
     }
 
     @SuppressWarnings( "deprecation" )
-    private void processTemplate( File outFile, Context context, String templateFileName, String encoding,
-                                  boolean failIfExists )
+    private boolean processTemplate( File outFile, Context context, String templateFileName, String encoding,
+                                     boolean failIfExists )
         throws OutputFileExists, ArchetypeGenerationFailure
     {
         templateFileName = templateFileName.replace( File.separatorChar, '/' );
@@ -656,43 +668,43 @@ public class DefaultFilesetArchetypeGene
             {
                 throw new OutputFileExists( "Don't override file " + outFile.getAbsolutePath() );
             }
-            else
-            {
-                getLogger().warn( "Don't override file " + outFile );
-            }
+
+            getLogger().warn( "Don't override file " + outFile );
+
+            return false;
         }
-        else
+
+        if ( !outFile.getParentFile().exists() )
         {
-            if ( !outFile.getParentFile().exists() )
-            {
-                outFile.getParentFile().mkdirs();
-            }
+            outFile.getParentFile().mkdirs();
+        }
 
-            getLogger().debug( "Merging into " + outFile );
+        getLogger().debug( "Merging into " + outFile );
 
-            Writer writer = null;
+        Writer writer = null;
 
-            try
-            {
-                StringWriter stringWriter = new StringWriter();
+        try
+        {
+            StringWriter stringWriter = new StringWriter();
 
-                velocity.getEngine().mergeTemplate( templateFileName, encoding, context, stringWriter );
+            velocity.getEngine().mergeTemplate( templateFileName, encoding, context, stringWriter );
 
-                writer = new OutputStreamWriter( new FileOutputStream( outFile ), encoding );
+            writer = new OutputStreamWriter( new FileOutputStream( outFile ), encoding );
 
-                writer.write( StringUtils.unifyLineSeparators( stringWriter.toString() ) );
+            writer.write( StringUtils.unifyLineSeparators( stringWriter.toString() ) );
 
-                writer.flush();
-            }
-            catch ( Exception e )
-            {
-                throw new ArchetypeGenerationFailure( "Error merging velocity templates: " + e.getMessage(), e );
-            }
-            finally
-            {
-                IOUtil.close( writer );
-            }
+            writer.flush();
+        }
+        catch ( Exception e )
+        {
+            throw new ArchetypeGenerationFailure( "Error merging velocity templates: " + e.getMessage(), e );
+        }
+        finally
+        {
+            IOUtil.close( writer );
         }
+
+        return true;
     }
 
     private void processTemplates( String packageName, File outputDirectoryFile, Context context,
@@ -703,12 +715,14 @@ public class DefaultFilesetArchetypeGene
         Iterator<FileSet> iterator = archetypeDescriptor.getFileSets().iterator();
         if ( iterator.hasNext() )
         {
-            getLogger().debug( "Processing filesets" );
+            getLogger().debug( "Processing filesets" + "\n  " + archetypeResources );
         }
 
+        int count = 0;
         while ( iterator.hasNext() )
         {
             FileSet fileSet = iterator.next();
+            count++;
 
             List<String> fileSetResources =
                 archetypeFilesResolver.filterFiles( moduleOffset, fileSet, archetypeResources );
@@ -720,25 +734,30 @@ public class DefaultFilesetArchetypeGene
 
             if ( fileSet.isFiltered() )
             {
-                getLogger().debug(
-                                   "Processing fileset " + fileSet + "\n\n\n\n" + fileSetResources + "\n\n"
-                                       + archetypeResources + "\n\n" );
+                getLogger().debug( "    Processing fileset " + fileSet + " -> " + fileSetResources.size() + ":\n      "
+                                       + fileSetResources );
 
-                processFileSet( fileSet.getDirectory(), fileSetResources, fileSet.isPackaged(), packageName, context,
-                                outputDirectoryFile, moduleOffset, getEncoding( fileSet.getEncoding() ), failIfExists );
+                int processed =
+                    processFileSet( fileSet.getDirectory(), fileSetResources, fileSet.isPackaged(), packageName,
+                                    context, outputDirectoryFile, moduleOffset, getEncoding( fileSet.getEncoding() ),
+                                    failIfExists );
 
-                getLogger().debug( "Processed " + fileSetResources.size() + " files." );
+                getLogger().debug( "    Processed " + processed + " files." );
             }
             else
             {
-                getLogger().debug( "Copying fileset " + fileSet );
+                getLogger().debug( "    Copying fileset " + fileSet + " -> " + fileSetResources.size() + ":\n      "
+                                       + fileSetResources );
 
-                copyFiles( fileSet.getDirectory(), fileSetResources, fileSet.isPackaged(), packageName,
-                           outputDirectoryFile, archetypeZipFile, moduleOffset, failIfExists, context );
+                int copied =
+                    copyFiles( fileSet.getDirectory(), fileSetResources, fileSet.isPackaged(), packageName,
+                               outputDirectoryFile, archetypeZipFile, moduleOffset, failIfExists, context );
 
-                getLogger().debug( "Copied " + fileSetResources.size() + " files." );
+                getLogger().debug( "    Copied " + copied + " files." );
             }
         }
+
+        getLogger().debug( "Processed " + count + " filesets" );
     }
 
     private void restoreParentArtifactId( Context context, String parentArtifactId )

Modified: maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/pom.xml
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/pom.xml?rev=1159926&r1=1159925&r2=1159926&view=diff
==============================================================================
--- maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/pom.xml (original)
+++ maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/pom.xml Sun Aug 21 00:18:42 2011
@@ -46,6 +46,12 @@ under the License.
           <artifactId>maven-archetype-plugin</artifactId>
           <version>@project.version@</version>
         </plugin>
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <configuration>
+            <includeEmptyDirs>true</includeEmptyDirs>
+          </configuration>
+        </plugin>
       </plugins>
     </pluginManagement>
   </build>

Modified: maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml?rev=1159926&r1=1159925&r2=1159926&view=diff
==============================================================================
--- maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml (original)
+++ maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml Sun Aug 21 00:18:42 2011
@@ -43,5 +43,11 @@ under the License.
         <include>**/*.properties</include>
       </includes>
     </fileSet>
+    <fileSet filtered="false" packaged="false" encoding="UTF-8">
+      <directory>src/main/resources</directory>
+      <includes>
+        <include>**</include>
+      </includes>
+    </fileSet>
   </fileSets>
 </archetype-descriptor>

Modified: maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/verify.bsh
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/verify.bsh?rev=1159926&r1=1159925&r2=1159926&view=diff
==============================================================================
--- maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/verify.bsh (original)
+++ maven/archetype/trunk/maven-archetype-plugin/src/it/build-archetype/verify.bsh Sun Aug 21 00:18:42 2011
@@ -42,4 +42,11 @@ if ( !packageInPathFormat.isFile() )
     throw new Exception( packageInPathFormat + " file is missing or not a file." );
 }
 
+// ARCHETYPE-289 check empty directory creation
+File artifactId = new File( main, "resources/empty-directory" );
+if ( !artifactId.isDirectory() )
+{
+    throw new Exception( artifactId + " directory is missing or not a directory." );
+}
+
 return true;