Author: jvanzyl Date: Sun Sep 23 22:54:33 2007 New Revision: 578666 URL: http://svn.apache.org/viewvc?rev=578666&view=rev Log: o make sure the archetype registry is used directly if it exists o take the lifecycle out of the project from archetype creation and use the components directly in sequence
Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelector.java maven/sandbox/trunk/archetypeng/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelector.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelector.java?rev=578666&r1=578665&r2=578666&view=diff ============================================================================== --- maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelector.java (original) +++ maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultArchetypeSelector.java Sun Sep 23 22:54:33 2007 @@ -34,12 +34,14 @@ import org.codehaus.plexus.components.interactivity.PrompterException; import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.util.StringUtils; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.List; import java.util.Properties; +import java.util.Iterator; /** @plexus.component */ public class DefaultArchetypeSelector @@ -113,7 +115,16 @@ if ( !archetypeDefinition.isDefined() ) { - List availableArchetypeInRegistry = archetypeRegistryManager.getDefaultArchetypeRegistry().getArchetypes(); + List availableArchetypeInRegistry; + + try + { + availableArchetypeInRegistry = archetypeRegistryManager.readArchetypeRegistry( archetypeRegistryFile ).getArchetypes(); + } + catch ( XmlPullParserException e ) + { + availableArchetypeInRegistry = archetypeRegistryManager.getDefaultArchetypeRegistry().getArchetypes(); + } if ( availableArchetypeInRegistry != null ) { @@ -133,8 +144,6 @@ ad.setRepository( archetype.getRepository() ); String goals = StringUtils.join( archetype.getGoals().iterator(), "," ); - - System.out.println( "goals = " + goals ); ad.setGoals( goals ); Modified: maven/sandbox/trunk/archetypeng/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java?rev=578666&r1=578665&r2=578666&view=diff ============================================================================== --- maven/sandbox/trunk/archetypeng/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java (original) +++ maven/sandbox/trunk/archetypeng/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java Sun Sep 23 22:54:33 2007 @@ -20,34 +20,129 @@ package org.apache.maven.archetype.mojos; import org.apache.maven.archetype.common.ArchetypePropertiesManager; +import org.apache.maven.archetype.common.ArchetypeRegistryManager; import org.apache.maven.archetype.common.Constants; +import org.apache.maven.archetype.generator.ArchetypeGenerationConfigurator; +import org.apache.maven.archetype.generator.ArchetypeGenerator; +import org.apache.maven.archetype.generator.ArchetypeSelector; +import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.ContextEnabled; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.settings.Settings; import org.apache.maven.shared.invoker.DefaultInvocationRequest; import org.apache.maven.shared.invoker.InvocationRequest; import org.apache.maven.shared.invoker.Invoker; import org.apache.maven.shared.invoker.MavenInvocationException; +import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.PropertyUtils; import org.codehaus.plexus.util.StringUtils; import java.io.File; import java.util.Arrays; +import java.util.List; import java.util.Properties; /** * Generates sample project from archetype. - * It delegates to the three mojos of the generate lifecycle: select-archetype, configure-generation, generate-project * * @author rafale * @requiresProject false * @goal create - * @execute phase="generate-sources" lifecycle="generate" + * @execute phase="generate-sources" */ public class CreateProjectFromArchetypeMojo extends AbstractMojo implements ContextEnabled { + // Select + + /** + * The archetype's artifactId. + * + * @parameter expression="${archetypeArtifactId}" + */ + private String archetypeArtifactId; + + /** + * The archetype's groupId. + * + * @parameter expression="${archetypeGroupId}" + */ + private String archetypeGroupId; + + /** + * The archetype's version. + * + * @parameter expression="${archetypeVersion}" + */ + private String archetypeVersion; + + + /** @component */ + private ArchetypeSelector selector; + + //! Select + + /** @component */ + ArchetypeRegistryManager archetypeRegistryManager; + + /** @component */ + ArchetypeGenerationConfigurator configurator; + + /** + * The location of the registry file. + * + * @parameter expression="${user.home}/.m2/archetype.xml" + */ + private File archetypeRegistryFile; + + /** + * Local maven repository. + * + * @parameter expression="${localRepository}" + * @required + * @readonly + */ + private ArtifactRepository localRepository; + + /** + * Remote repositories defined in the project's pom (used only when called from an existing + * project). + * + * @parameter expression="${project.remoteArtifactRepositories}" + * @required + * @readonly + */ + private List pomRemoteRepositories; + + /** + * The property file that holds the plugin configuration. + * + * @parameter default-value="archetype.properties" expression="${archetype.properties}" + */ + private File propertyFile = null; + + /** + * Other remote repositories available for discovering dependencies and extensions. + * + * @parameter expression="${remoteRepositories}" + */ + private String remoteRepositories; + + /** + * User settings use to check the interactiveMode. + * + * @parameter expression="${settings}" + * @required + * @readonly + */ + private Settings settings; + + /** @component */ + ArchetypeGenerator generator; + /** * Maven invoker used to execution additional goals after the archetype has been created. * @@ -73,6 +168,53 @@ MojoExecutionException, MojoFailureException { + // Select Archetype + + try + { + List repositories = + archetypeRegistryManager.getRepositories( + pomRemoteRepositories, + remoteRepositories, + archetypeRegistryFile + ); + + selector.selectArchetype( + archetypeGroupId, + archetypeArtifactId, + archetypeVersion, + settings.getInteractiveMode(), + propertyFile, + archetypeRegistryFile, + localRepository, + repositories + ); + + configurator.configureArchetype( + settings.getInteractiveMode(), + propertyFile, + System.getProperties(), + localRepository, + repositories + ); + + generator.generateArchetype( propertyFile, localRepository, repositories, basedir.getAbsolutePath() ); + + Properties archetypeProperties = PropertyUtils.loadProperties( propertyFile ); + + if ( archetypeProperties != null ) + { + getPluginContext().put( "artifactId", archetypeProperties.getProperty( "artifactId" ) ); + } + } + catch ( Exception ex ) + { + throw new MojoExecutionException( ex.getMessage(), ex ); + } + + // Configure Generation + + // At this point the archetype has been generated from the archetype and now we will // run some goals that the archetype creator has requested to be run once the project // has been created.