Author: brett Date: Mon Apr 3 00:24:06 2006 New Revision: 390971 URL: http://svn.apache.org/viewcvs?rev=390971&view=rev Log: [ARCHETYPE-22] allow subpackages in the archetype
Modified: maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java Modified: maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java URL: http://svn.apache.org/viewcvs/maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java?rev=390971&r1=390970&r2=390971&view=diff ============================================================================== --- maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java (original) +++ maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java Mon Apr 3 00:24:06 2006 @@ -526,8 +526,12 @@ if ( !overrideSrcDir ) { FileUtils.mkdir( outputDirectory + DEFAULT_SOURCE_DIR ); + processSources( outputDirectory, context, descriptor, packageName, DEFAULT_SOURCE_DIR ); + } + else + { + processSources( outputDirectory, context, descriptor, packageName, build.getSourceDirectory() ); } - processSources( outputDirectory, context, descriptor, packageName ); } if ( descriptor.getResources().size() > 0 ) @@ -548,9 +552,12 @@ if ( !overrideTestSrcDir ) { FileUtils.mkdir( outputDirectory + DEFAULT_TEST_SOURCE_DIR ); + processTestSources( outputDirectory, context, descriptor, packageName, DEFAULT_TEST_SOURCE_DIR ); + } + else + { + processTestSources( outputDirectory, context, descriptor, packageName, build.getTestSourceDirectory() ); } - - processTestSources( outputDirectory, context, descriptor, packageName ); } if ( descriptor.getTestResources().size() > 0 ) @@ -572,6 +579,13 @@ } } + private void processTemplate( String outputDirectory, Context context, String template, + TemplateDescriptor descriptor, boolean packageInFileName, String packageName ) + throws ArchetypeTemplateProcessingException + { + processTemplate( outputDirectory, context, template, descriptor, packageInFileName, packageName, null ); + } + private String getOutputDirectory( String outputDirectory, String testResourceDirectory ) { return outputDirectory + @@ -583,7 +597,7 @@ // ---------------------------------------------------------------------- protected void processSources( String outputDirectory, Context context, ArchetypeDescriptor descriptor, - String packageName ) + String packageName, String sourceDirectory ) throws ArchetypeTemplateProcessingException { for ( Iterator i = descriptor.getSources().iterator(); i.hasNext(); ) @@ -591,12 +605,12 @@ String template = (String) i.next(); processTemplate( outputDirectory, context, template, descriptor.getSourceDescriptor( template ), true, - packageName ); + packageName, sourceDirectory ); } } protected void processTestSources( String outputDirectory, Context context, ArchetypeDescriptor descriptor, - String packageName ) + String packageName, String testSourceDirectory ) throws ArchetypeTemplateProcessingException { for ( Iterator i = descriptor.getTestSources().iterator(); i.hasNext(); ) @@ -604,7 +618,7 @@ String template = (String) i.next(); processTemplate( outputDirectory, context, template, descriptor.getTestSourceDescriptor( template ), true, - packageName ); + packageName, testSourceDirectory ); } } @@ -648,7 +662,8 @@ } protected void processTemplate( String outputDirectory, Context context, String template, - TemplateDescriptor descriptor, boolean packageInFileName, String packageName ) + TemplateDescriptor descriptor, boolean packageInFileName, String packageName, + String sourceDirectory ) throws ArchetypeTemplateProcessingException { File f; @@ -663,9 +678,31 @@ String filename = FileUtils.filename( templateFileName ); - String dirname = FileUtils.dirname( templateFileName ); + String dirname = FileUtils.dirname( templateFileName ).replace( '\\', '/' ); + + sourceDirectory = sourceDirectory.replace( '\\', '/' ); + if ( sourceDirectory.startsWith( "/" ) ) + { + sourceDirectory = sourceDirectory.substring( 1 ); + } + + if ( !dirname.startsWith( sourceDirectory ) ) + { + throw new ArchetypeTemplateProcessingException( + "Template '" + template + "' not in directory '" + sourceDirectory + "'" ); + } + + String extraPackages = dirname.substring( sourceDirectory.length() ); + if ( extraPackages.startsWith( "/" ) ) + { + extraPackages = extraPackages.substring( 1 ); + } + if ( extraPackages.length() > 0 ) + { + path += "/" + extraPackages; + } - f = new File( new File( new File( outputDirectory, dirname ), path ), filename ); + f = new File( new File( new File( outputDirectory, sourceDirectory ), path ), filename ); } else {