mirror of https://github.com/apache/maven.git
Initial revision
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163280 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
153d46aa2f
commit
df4ea9d0d3
|
@ -0,0 +1,9 @@
|
||||||
|
target
|
||||||
|
*~
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.log
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
<project>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>maven</groupId>
|
||||||
|
<artifactId>maven-archetype-core</artifactId>
|
||||||
|
<version>1.0-alpha-1-SNAPSHOT</version>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>plexus</groupId>
|
||||||
|
<artifactId>plexus-container-default</artifactId>
|
||||||
|
<version>1.0-alpha-2-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>plexus</groupId>
|
||||||
|
<artifactId>plexus-velocity</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>maven</groupId>
|
||||||
|
<artifactId>maven-artifact</artifactId>
|
||||||
|
<version>2.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>maven</groupId>
|
||||||
|
<artifactId>wagon-http-lightweight</artifactId>
|
||||||
|
<version>1.0-alpha-2-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1 @@
|
||||||
|
maven.log
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004 Your Corporation. All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.apache.maven.archetype;
|
||||||
|
|
||||||
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public interface Archetype
|
||||||
|
{
|
||||||
|
String ROLE = Archetype.class.getName();
|
||||||
|
|
||||||
|
String ARCHETYPE_DESCRIPTOR = "META-INF/archetype.xml";
|
||||||
|
|
||||||
|
String ARCHETYPE_RESOURCES = "archetype-resources";
|
||||||
|
|
||||||
|
String ARCHETYPE_POM = "pom.xml";
|
||||||
|
|
||||||
|
void createArchetype( String archetypeId, ArtifactRepository localRepository, Set remoteRepositories, Map parameters )
|
||||||
|
throws ArchetypeNotFoundException, ArchetypeDescriptorException, ArchetypeTemplateProcessingException;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004 Your Corporation. All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.apache.maven.archetype;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class ArchetypeDescriptorException
|
||||||
|
extends Exception
|
||||||
|
{
|
||||||
|
public ArchetypeDescriptorException( String message )
|
||||||
|
{
|
||||||
|
super( message );
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArchetypeDescriptorException( Throwable cause )
|
||||||
|
{
|
||||||
|
super( cause );
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArchetypeDescriptorException( String message, Throwable cause )
|
||||||
|
{
|
||||||
|
super( message, cause );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004 Your Corporation. All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.apache.maven.archetype;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class ArchetypeNotFoundException
|
||||||
|
extends Exception
|
||||||
|
{
|
||||||
|
public ArchetypeNotFoundException( String message )
|
||||||
|
{
|
||||||
|
super( message );
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArchetypeNotFoundException( Throwable cause )
|
||||||
|
{
|
||||||
|
super( cause );
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArchetypeNotFoundException( String message, Throwable cause )
|
||||||
|
{
|
||||||
|
super( message, cause );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004 Your Corporation. All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.apache.maven.archetype;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class ArchetypeTemplateProcessingException
|
||||||
|
extends Exception
|
||||||
|
{
|
||||||
|
public ArchetypeTemplateProcessingException( String message )
|
||||||
|
{
|
||||||
|
super( message );
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArchetypeTemplateProcessingException( Throwable cause )
|
||||||
|
{
|
||||||
|
super( cause );
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArchetypeTemplateProcessingException( String message, Throwable cause )
|
||||||
|
{
|
||||||
|
super( message, cause );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,199 @@
|
||||||
|
package org.apache.maven.archetype;
|
||||||
|
|
||||||
|
import org.apache.maven.archetype.descriptor.ArchetypeDescriptor;
|
||||||
|
import org.apache.maven.archetype.descriptor.ArchetypeDescriptorBuilder;
|
||||||
|
import org.apache.maven.artifact.Artifact;
|
||||||
|
import org.apache.maven.artifact.resolver.ArtifactResolver;
|
||||||
|
import org.apache.maven.artifact.manager.WagonManager;
|
||||||
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
import org.apache.velocity.VelocityContext;
|
||||||
|
import org.apache.velocity.context.Context;
|
||||||
|
import org.codehaus.plexus.util.FileUtils;
|
||||||
|
import org.codehaus.plexus.velocity.VelocityComponent;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class DefaultArchetype
|
||||||
|
implements Archetype
|
||||||
|
{
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Components
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
private VelocityComponent velocity;
|
||||||
|
|
||||||
|
private WagonManager wagonManager;
|
||||||
|
|
||||||
|
private ArtifactResolver artifactResolver;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
// groupId = maven
|
||||||
|
// artifactId = maven-foo-archetype
|
||||||
|
// version = latest
|
||||||
|
|
||||||
|
public void createArchetype( String archetypeId, ArtifactRepository localRepository, Set remoteRepositories, Map parameters )
|
||||||
|
throws ArchetypeNotFoundException, ArchetypeDescriptorException, ArchetypeTemplateProcessingException
|
||||||
|
{
|
||||||
|
Artifact archetypeJar = wagonManager.createArtifact( "maven", "maven-archetype-" + archetypeId, "1.0-alpha-1-SNAPSHOT", "jar" );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
artifactResolver.resolve( archetypeJar, remoteRepositories, localRepository );
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
throw new ArchetypeNotFoundException( "Cannot download archetype.", e );
|
||||||
|
}
|
||||||
|
|
||||||
|
String outputDirectory = (String) parameters.get( "outputDirectory" );
|
||||||
|
|
||||||
|
String packageName = (String) parameters.get( "package" );
|
||||||
|
|
||||||
|
createProjectDirectoryStructure( outputDirectory );
|
||||||
|
|
||||||
|
ArchetypeDescriptorBuilder builder = new ArchetypeDescriptorBuilder();
|
||||||
|
|
||||||
|
ArchetypeDescriptor descriptor = null;
|
||||||
|
|
||||||
|
URLClassLoader archetypeJarLoader;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
URL[] urls = new URL[1];
|
||||||
|
|
||||||
|
urls[0] = archetypeJar.getFile().toURL();
|
||||||
|
|
||||||
|
archetypeJarLoader = new URLClassLoader( urls );
|
||||||
|
|
||||||
|
InputStream is = getStream( ARCHETYPE_DESCRIPTOR, archetypeJarLoader );
|
||||||
|
|
||||||
|
if ( is == null )
|
||||||
|
{
|
||||||
|
throw new ArchetypeDescriptorException( "The " + ARCHETYPE_DESCRIPTOR + " descriptor cannot be found." );
|
||||||
|
}
|
||||||
|
|
||||||
|
descriptor = (ArchetypeDescriptor) builder.build( new InputStreamReader( is ) );
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
throw new ArchetypeDescriptorException( "Error reading the " + ARCHETYPE_DESCRIPTOR + " descriptor.", e );
|
||||||
|
}
|
||||||
|
|
||||||
|
Context context = new VelocityContext();
|
||||||
|
|
||||||
|
context.put( "package", packageName );
|
||||||
|
|
||||||
|
for ( Iterator iterator = parameters.keySet().iterator(); iterator.hasNext(); )
|
||||||
|
{
|
||||||
|
String key = (String) iterator.next();
|
||||||
|
|
||||||
|
Object value = parameters.get( key );
|
||||||
|
|
||||||
|
context.put( key, value );
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ClassLoader old = Thread.currentThread().getContextClassLoader();
|
||||||
|
|
||||||
|
Thread.currentThread().setContextClassLoader( archetypeJarLoader );
|
||||||
|
|
||||||
|
processTemplate( outputDirectory, context, ARCHETYPE_POM, null );
|
||||||
|
|
||||||
|
processSources( outputDirectory, context, descriptor.getSources(), packageName );
|
||||||
|
|
||||||
|
processSources( outputDirectory, context, descriptor.getTestSources(), packageName );
|
||||||
|
|
||||||
|
Thread.currentThread().setContextClassLoader( old );
|
||||||
|
}
|
||||||
|
catch ( Exception e )
|
||||||
|
{
|
||||||
|
throw new ArchetypeTemplateProcessingException( "Error processing templates.", e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void processSources( String outputDirectory, Context context, List sources, String packageName )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
for ( Iterator i = sources.iterator(); i.hasNext(); )
|
||||||
|
{
|
||||||
|
String template = (String) i.next();
|
||||||
|
|
||||||
|
processTemplate( outputDirectory, context, template, packageName );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void processTemplate( String outputDirectory, Context context, String template, String packageName )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
File f;
|
||||||
|
|
||||||
|
if ( packageName != null )
|
||||||
|
{
|
||||||
|
String path = packageName.replace( '.', '/' );
|
||||||
|
|
||||||
|
String filename = FileUtils.filename( template );
|
||||||
|
|
||||||
|
String dirname = FileUtils.dirname( template );
|
||||||
|
|
||||||
|
f = new File( new File( new File( outputDirectory, dirname ), path ), filename );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
f = new File( outputDirectory, template );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !f.getParentFile().exists() )
|
||||||
|
{
|
||||||
|
f.getParentFile().mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
Writer writer = new FileWriter( f );
|
||||||
|
|
||||||
|
template = ARCHETYPE_RESOURCES + "/" + template;
|
||||||
|
|
||||||
|
velocity.getEngine().mergeTemplate( template, context, writer );
|
||||||
|
|
||||||
|
writer.flush();
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void createProjectDirectoryStructure( String outputDirectory )
|
||||||
|
{
|
||||||
|
FileUtils.mkdir( outputDirectory + "/src/main/java" );
|
||||||
|
|
||||||
|
FileUtils.mkdir( outputDirectory + "/src/main/resources" );
|
||||||
|
|
||||||
|
FileUtils.mkdir( outputDirectory + "/src/test/java" );
|
||||||
|
|
||||||
|
FileUtils.mkdir( outputDirectory + "/src/test/resources" );
|
||||||
|
}
|
||||||
|
|
||||||
|
private InputStream getStream( String name, ClassLoader loader )
|
||||||
|
{
|
||||||
|
if ( loader == null )
|
||||||
|
{
|
||||||
|
return Thread.currentThread().getContextClassLoader().getResourceAsStream( name );
|
||||||
|
}
|
||||||
|
|
||||||
|
return loader.getResourceAsStream( name );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
package org.apache.maven.archetype.descriptor;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ArchetypeDescriptor
|
||||||
|
{
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private List sources;
|
||||||
|
|
||||||
|
private List testSources;
|
||||||
|
|
||||||
|
private List resources;
|
||||||
|
|
||||||
|
private List testResources;
|
||||||
|
|
||||||
|
public ArchetypeDescriptor()
|
||||||
|
{
|
||||||
|
sources = new ArrayList();
|
||||||
|
|
||||||
|
resources = new ArrayList();
|
||||||
|
|
||||||
|
testSources = new ArrayList();
|
||||||
|
|
||||||
|
testResources = new ArrayList();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
public String getId()
|
||||||
|
{
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId( String id )
|
||||||
|
{
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addSource( String source )
|
||||||
|
{
|
||||||
|
sources.add( source );
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getSources()
|
||||||
|
{
|
||||||
|
return sources;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addTestSource( String testSource )
|
||||||
|
{
|
||||||
|
testSources.add( testSource );
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getTestSources()
|
||||||
|
{
|
||||||
|
return testSources;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addResource( String resource )
|
||||||
|
{
|
||||||
|
resources.add( resource );
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getResources()
|
||||||
|
{
|
||||||
|
return resources;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addTestResource( String testResource )
|
||||||
|
{
|
||||||
|
testResources.add( testResource );
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getTestResources()
|
||||||
|
{
|
||||||
|
return testResources;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
package org.apache.maven.archetype.descriptor;
|
||||||
|
|
||||||
|
import java.io.Reader;
|
||||||
|
|
||||||
|
import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
|
||||||
|
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class ArchetypeDescriptorBuilder
|
||||||
|
{
|
||||||
|
public ArchetypeDescriptor build( Reader reader )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
ArchetypeDescriptor descriptor = new ArchetypeDescriptor();
|
||||||
|
|
||||||
|
Xpp3Dom dom = Xpp3DomBuilder.build( reader );
|
||||||
|
|
||||||
|
descriptor.setId( dom.getChild( "id" ).getValue() );
|
||||||
|
|
||||||
|
Xpp3Dom sources = dom.getChild( "sources" );
|
||||||
|
|
||||||
|
if ( sources != null )
|
||||||
|
{
|
||||||
|
Xpp3Dom[] sourceList = sources.getChildren( "source" );
|
||||||
|
|
||||||
|
for ( int i = 0; i < sourceList.length; i++ )
|
||||||
|
{
|
||||||
|
descriptor.addSource( sourceList[i].getValue() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Xpp3Dom resources = dom.getChild( "resources" );
|
||||||
|
|
||||||
|
if ( resources != null )
|
||||||
|
{
|
||||||
|
Xpp3Dom[] resourceList = resources.getChildren( "source" );
|
||||||
|
|
||||||
|
for ( int i = 0; i < resourceList.length; i++ )
|
||||||
|
{
|
||||||
|
descriptor.addResource( resourceList[i].getValue() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Xpp3Dom testSources = dom.getChild( "testSources" );
|
||||||
|
|
||||||
|
if ( testSources != null )
|
||||||
|
{
|
||||||
|
Xpp3Dom[] testSourceList = testSources.getChildren( "source" );
|
||||||
|
|
||||||
|
for ( int i = 0; i < testSourceList.length; i++ )
|
||||||
|
{
|
||||||
|
descriptor.addTestSource( testSourceList[i].getValue() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Xpp3Dom testResources = dom.getChild( "sources" );
|
||||||
|
|
||||||
|
if ( testResources != null )
|
||||||
|
{
|
||||||
|
Xpp3Dom[] testResourceList = sources.getChildren( "source" );
|
||||||
|
|
||||||
|
for ( int i = 0; i < testResourceList.length; i++ )
|
||||||
|
{
|
||||||
|
descriptor.addTestResource( testResourceList[i].getValue() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return descriptor;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004 Your Corporation. All Rights Reserved.
|
||||||
|
*/
|
||||||
|
package org.apache.maven.archetype.descriptor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pass over the directory containing the sources of the archetype and create
|
||||||
|
* the appropriate descriptor.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class ArchetypeDescriptorGenerator
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
<component-set>
|
||||||
|
<components>
|
||||||
|
<component>
|
||||||
|
<role>org.apache.maven.archetype.Archetype</role>
|
||||||
|
<implementation>org.apache.maven.archetype.DefaultArchetype</implementation>
|
||||||
|
<requirements>
|
||||||
|
<requirement>
|
||||||
|
<role>org.codehaus.plexus.velocity.VelocityComponent</role>
|
||||||
|
</requirement>
|
||||||
|
<requirement>
|
||||||
|
<role>org.apache.maven.artifact.manager.WagonManager</role>
|
||||||
|
</requirement>
|
||||||
|
<requirement>
|
||||||
|
<role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
|
||||||
|
</requirement>
|
||||||
|
</requirements>
|
||||||
|
</component>
|
||||||
|
</components>
|
||||||
|
</component-set>
|
|
@ -0,0 +1,60 @@
|
||||||
|
package org.apache.maven.archetype;
|
||||||
|
|
||||||
|
import org.codehaus.plexus.PlexusTestCase;
|
||||||
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class ArchetypeTest
|
||||||
|
extends PlexusTestCase
|
||||||
|
{
|
||||||
|
public void testArchetype()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
Archetype archetype = (Archetype) lookup( Archetype.ROLE );
|
||||||
|
|
||||||
|
Map parameters = new HashMap();
|
||||||
|
|
||||||
|
parameters.put( "name", "jason" );
|
||||||
|
|
||||||
|
parameters.put( "groupId", "maven" );
|
||||||
|
|
||||||
|
parameters.put( "artifactId", "quickstart" );
|
||||||
|
|
||||||
|
parameters.put( "version", "1.0-alpha-1-SNAPSHOT" );
|
||||||
|
|
||||||
|
parameters.put( "package", "org.apache.maven.quickstart" );
|
||||||
|
|
||||||
|
parameters.put( "outputDirectory",new File( getBasedir(), "target/archetype" ).getPath() );
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// This needs to be encapsulated in a maven test case.
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
File mavenPropertiesFile = new File( System.getProperty( "user.home" ), ".m2/maven.properties" );
|
||||||
|
|
||||||
|
Properties mavenProperties = new Properties();
|
||||||
|
|
||||||
|
mavenProperties.load( new FileInputStream( mavenPropertiesFile ) );
|
||||||
|
|
||||||
|
ArtifactRepository localRepository = new ArtifactRepository( "local", "file://" + mavenProperties.getProperty( "maven.repo.local" ) );
|
||||||
|
|
||||||
|
Set remoteRepositories = new HashSet();
|
||||||
|
|
||||||
|
ArtifactRepository remoteRepository = new ArtifactRepository( "remote", "http://repo1.maven.org" );
|
||||||
|
|
||||||
|
remoteRepositories.add( remoteRepository );
|
||||||
|
|
||||||
|
archetype.createArchetype( "quickstart", localRepository, remoteRepositories, parameters);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
package org.apache.maven.archetype.descriptor;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import java.io.StringReader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class ArchetypeDescriptorBuilderTest
|
||||||
|
extends TestCase
|
||||||
|
{
|
||||||
|
public void testBuilder()
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
String xml =
|
||||||
|
"<archetype>" +
|
||||||
|
" <id>standard</id>" +
|
||||||
|
" <sources>" +
|
||||||
|
" <source>source0</source>" +
|
||||||
|
" <source>source1</source>" +
|
||||||
|
" </sources>" +
|
||||||
|
" <resources>" +
|
||||||
|
" <source>source0</source>" +
|
||||||
|
" <source>source1</source>" +
|
||||||
|
" </resources>" +
|
||||||
|
" <testSources>" +
|
||||||
|
" <source>source0</source>" +
|
||||||
|
" <source>source1</source>" +
|
||||||
|
" </testSources>" +
|
||||||
|
" <testResources>" +
|
||||||
|
" <source>source0</source>" +
|
||||||
|
" <source>source1</source>" +
|
||||||
|
" </testResources>" +
|
||||||
|
"</archetype>";
|
||||||
|
|
||||||
|
ArchetypeDescriptorBuilder builder = new ArchetypeDescriptorBuilder();
|
||||||
|
|
||||||
|
ArchetypeDescriptor descriptor = (ArchetypeDescriptor) builder.build( new StringReader( xml ) );
|
||||||
|
|
||||||
|
assertEquals( "standard", descriptor.getId() );
|
||||||
|
|
||||||
|
assertEquals( 2, descriptor.getSources().size() );
|
||||||
|
|
||||||
|
assertEquals( 2, descriptor.getResources().size() );
|
||||||
|
|
||||||
|
assertEquals( 2, descriptor.getTestSources().size() );
|
||||||
|
|
||||||
|
assertEquals( 2, descriptor.getTestResources().size() );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<properties>
|
||||||
|
<title>Maven</title>
|
||||||
|
<author email="jason@zenplex.com">Jason van Zyl</author>
|
||||||
|
</properties>
|
||||||
|
<body>
|
||||||
|
<section name="Maven">
|
||||||
|
<p>
|
||||||
|
Maven is a Java project management and project comprehension tool. Maven
|
||||||
|
is based on the concept of a project object model (POM) in that all the
|
||||||
|
artifacts produced by Maven are a result of consulting a well defined
|
||||||
|
model for your project. Builds, documentation, source metrics, and source
|
||||||
|
cross-references are all controlled by your POM. Look here to see the
|
||||||
|
full list of Maven's <a href="features.html"><b>features</b></a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<source>
|
||||||
|
public class Foo
|
||||||
|
{
|
||||||
|
}
|
||||||
|
</source>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</document>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<project name="Maven">
|
||||||
|
|
||||||
|
<title>Maven</title>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<links>
|
||||||
|
<item name="Plexus" href="http://plexus.codehaus.org"/>
|
||||||
|
</links>
|
||||||
|
|
||||||
|
<menu name="Quick Links">
|
||||||
|
<item name="Model" href="/maven.html"/>
|
||||||
|
</menu>
|
||||||
|
</body>
|
||||||
|
</project>
|
|
@ -0,0 +1,9 @@
|
||||||
|
target
|
||||||
|
*~
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.log
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
|
||||||
|
<project>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>maven</groupId>
|
||||||
|
<artifactId>maven-plugin-parent</artifactId>
|
||||||
|
<version>2.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<groupId>maven</groupId>
|
||||||
|
<artifactId>maven-archetype-plugin</artifactId>
|
||||||
|
<name>Maven Archetype Plugin</name>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<type>plugin</type>
|
||||||
|
<package>org.apache.maven</package>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>maven</groupId>
|
||||||
|
<artifactId>maven-archetype-core</artifactId>
|
||||||
|
<version>1.0-alpha-1-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,102 @@
|
||||||
|
package org.apache.maven.plugin.archetype;
|
||||||
|
|
||||||
|
import org.apache.maven.archetype.Archetype;
|
||||||
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
import org.apache.maven.plugin.AbstractPlugin;
|
||||||
|
import org.apache.maven.plugin.PluginExecutionRequest;
|
||||||
|
import org.apache.maven.plugin.PluginExecutionResponse;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @goal create
|
||||||
|
*
|
||||||
|
* @description Builds archetype containers.
|
||||||
|
*
|
||||||
|
* @parameter
|
||||||
|
* name="archetype"
|
||||||
|
* type="org.apache.maven.archetype.Archetype"
|
||||||
|
* required="true"
|
||||||
|
* validator=""
|
||||||
|
* expression="#component.org.apache.maven.archetype.Archetype"
|
||||||
|
* description=""
|
||||||
|
*
|
||||||
|
* @parameter
|
||||||
|
* name="localRepository"
|
||||||
|
* type="org.apache.maven.artifact.ArtifactRepository"
|
||||||
|
* required="true"
|
||||||
|
* validator=""
|
||||||
|
* expression="#localRepository"
|
||||||
|
* description=""
|
||||||
|
*
|
||||||
|
* @parameter
|
||||||
|
* name="groupId"
|
||||||
|
* type="String"
|
||||||
|
* required="true"
|
||||||
|
* validator=""
|
||||||
|
* expression="#groupId"
|
||||||
|
* default="maven"
|
||||||
|
* description=""
|
||||||
|
*
|
||||||
|
* @parameter
|
||||||
|
* name="artifactId"
|
||||||
|
* type="String"
|
||||||
|
* required="true"
|
||||||
|
* validator=""
|
||||||
|
* expression="#artifactId"
|
||||||
|
* default="quickstart"
|
||||||
|
* description=""
|
||||||
|
*
|
||||||
|
* @parameter
|
||||||
|
* name="version"
|
||||||
|
* type="String"
|
||||||
|
* required="true"
|
||||||
|
* validator=""
|
||||||
|
* expression="#version"
|
||||||
|
* default="1.0"
|
||||||
|
* description=""
|
||||||
|
*
|
||||||
|
* @parameter
|
||||||
|
* name="package"
|
||||||
|
* type="String"
|
||||||
|
* required="true"
|
||||||
|
* validator=""
|
||||||
|
* expression="#package"
|
||||||
|
* default="org.apache.maven.quickstart"
|
||||||
|
* description=""
|
||||||
|
*/
|
||||||
|
public class MavenArchetypePlugin
|
||||||
|
extends AbstractPlugin
|
||||||
|
{
|
||||||
|
public void execute( PluginExecutionRequest request, PluginExecutionResponse response )
|
||||||
|
throws Exception
|
||||||
|
{
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// archetypeId
|
||||||
|
// localRepository
|
||||||
|
// remoteRepository
|
||||||
|
// parameters
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
// When there is no project how do we get the local repository and remote repos.
|
||||||
|
// The local repository will always be present but the remote is in the POM except
|
||||||
|
// for the super POM ...
|
||||||
|
|
||||||
|
ArtifactRepository localRepository = (ArtifactRepository) request.getParameter( "localRepository" );
|
||||||
|
|
||||||
|
Set remoteRepositories = new HashSet();
|
||||||
|
|
||||||
|
ArtifactRepository remoteRepository = new ArtifactRepository( "remote", "http://repo1.maven.org" );
|
||||||
|
|
||||||
|
remoteRepositories.add( remoteRepository );
|
||||||
|
|
||||||
|
String archetypeId = (String) request.getParameter( "archetypeId" );
|
||||||
|
|
||||||
|
Archetype archetype = (Archetype) request.getParameter( "archetype" );
|
||||||
|
|
||||||
|
request.getParameters().put( "outputDirectory", System.getProperty( "user.dir" ) );
|
||||||
|
|
||||||
|
archetype.createArchetype( "quickstart", localRepository, remoteRepositories, request.getParameters() );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
<plexus>
|
||||||
|
<components>
|
||||||
|
<component>
|
||||||
|
<role>org.codehaus.plexus.builder.PlexusBuilder</role>
|
||||||
|
<implementation>org.codehaus.plexus.builder.DefaultPlexusBuilder</implementation>
|
||||||
|
<requirements>
|
||||||
|
<requirement>
|
||||||
|
<role>org.apache.maven.artifact.resolver.ArtifactResolver</role>
|
||||||
|
</requirement>
|
||||||
|
<requirement>
|
||||||
|
<role>org.apache.maven.artifact.collector.ArtifactCollector</role>
|
||||||
|
</requirement>
|
||||||
|
<requirement>
|
||||||
|
<role>org.apache.maven.project.MavenProjectBuilder</role>
|
||||||
|
</requirement>
|
||||||
|
<requirement>
|
||||||
|
<role>org.codehaus.plexus.velocity.VelocityComponent</role>
|
||||||
|
</requirement>
|
||||||
|
</requirements>
|
||||||
|
</component>
|
||||||
|
|
||||||
|
<component>
|
||||||
|
<role>org.codehaus.plexus.velocity.VelocityComponent</role>
|
||||||
|
<implementation>org.codehaus.plexus.velocity.DefaultVelocityComponent</implementation>
|
||||||
|
<configuration>
|
||||||
|
<properties>
|
||||||
|
<property>
|
||||||
|
<name>resource.loader</name>
|
||||||
|
<value>classpath</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>classpath.resource.loader.class</name>
|
||||||
|
<value>org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</value>
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
||||||
|
</components>
|
||||||
|
</plexus>
|
|
@ -0,0 +1,9 @@
|
||||||
|
target
|
||||||
|
*~
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.log
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
<project>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>maven</groupId>
|
||||||
|
<artifactId>maven-archetype-quickstart</artifactId>
|
||||||
|
<version>1.0-alpha-1-SNAPSHOT</version>
|
||||||
|
</project>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<archetype>
|
||||||
|
<id>quickstart</id>
|
||||||
|
<sources>
|
||||||
|
<source>src/main/java/App.java</source>
|
||||||
|
</sources>
|
||||||
|
<testSources>
|
||||||
|
<source>src/test/java/AbstractTestCase.java</source>
|
||||||
|
<source>src/test/java/AppTest.java</source>
|
||||||
|
</testSources>
|
||||||
|
</archetype>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<project>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>${groupId}</groupId>
|
||||||
|
<artifactId>${artifactId}</artifactId>
|
||||||
|
<version>${version}</version>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,15 @@
|
||||||
|
package $package;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hello world!
|
||||||
|
*
|
||||||
|
* @author <a href="jason@zenplex.com">Jason van Zyl</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class App
|
||||||
|
{
|
||||||
|
public static void main( String[] args )
|
||||||
|
{
|
||||||
|
System.out.println( "Hello World!" );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package $package;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract base class for test cases.
|
||||||
|
*
|
||||||
|
* @author <a href="jason@zenplex.com">Jason van Zyl</a>
|
||||||
|
*/
|
||||||
|
public abstract class AbstractTestCase
|
||||||
|
extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Basedir for all file I/O. Important when running tests from
|
||||||
|
* the reactor.
|
||||||
|
*/
|
||||||
|
public String basedir = System.getProperty("basedir");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*/
|
||||||
|
public AbstractTestCase(String testName)
|
||||||
|
{
|
||||||
|
super(testName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get test input file.
|
||||||
|
*
|
||||||
|
* @param path Path to test input file.
|
||||||
|
*/
|
||||||
|
public String getTestFile(String path)
|
||||||
|
{
|
||||||
|
return new File(basedir,path).getAbsolutePath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
package $package;
|
||||||
|
|
||||||
|
import junit.framework.Test;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit test for simple App.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jason@zenplex.com">Jason van Zyl</a>
|
||||||
|
*/
|
||||||
|
public class AppTest
|
||||||
|
extends AbstractTestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Create the test case
|
||||||
|
*
|
||||||
|
* @param testName name of the test case
|
||||||
|
*/
|
||||||
|
public AppTest( String testName )
|
||||||
|
{
|
||||||
|
super( testName );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the suite of tests being tested
|
||||||
|
*/
|
||||||
|
public static Test suite()
|
||||||
|
{
|
||||||
|
return new TestSuite( AppTest.class );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rigourous Test :-)
|
||||||
|
*/
|
||||||
|
public void testApp()
|
||||||
|
{
|
||||||
|
assertEquals( "maven kicks ass", "maven kicks ass" );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue