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;