You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2005/10/05 05:38:56 UTC
svn commit: r294979 - in /maven/components/trunk/maven-archetype: ./
maven-archetype-core/
maven-archetype-core/src/main/java/org/apache/maven/archetype/
maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/
maven-archetype-core/src...
Author: jvanzyl
Date: Tue Oct 4 20:38:41 2005
New Revision: 294979
URL: http://svn.apache.org/viewcvs?rev=294979&view=rev
Log:
o archetypes can now specify whether they can be partial projects. my
particular use case was the need to lay down a template site within an
existing project so i could easily document how to quickly get a site
up and running for an existing project.
Modified:
maven/components/trunk/maven-archetype/maven-archetype-core/pom.xml
maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java
maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/ArchetypeDescriptor.java
maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/ArchetypeDescriptorBuilder.java
maven/components/trunk/maven-archetype/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java
maven/components/trunk/maven-archetype/maven-archetype-plugin/pom.xml
maven/components/trunk/maven-archetype/maven-archetype-plugin/src/main/java/org/apache/maven/plugin/archetype/MavenArchetypeMojo.java
maven/components/trunk/maven-archetype/maven-archetypes/maven-archetype-site/pom.xml
maven/components/trunk/maven-archetype/maven-archetypes/maven-archetype-site/src/main/resources/META-INF/archetype.xml
maven/components/trunk/maven-archetype/pom.xml
Modified: maven/components/trunk/maven-archetype/maven-archetype-core/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/maven-archetype-core/pom.xml?rev=294979&r1=294978&r2=294979&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/maven-archetype-core/pom.xml (original)
+++ maven/components/trunk/maven-archetype/maven-archetype-core/pom.xml Tue Oct 4 20:38:41 2005
@@ -45,4 +45,4 @@
<artifactId>plexus-container-default</artifactId>
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
Modified: maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java?rev=294979&r1=294978&r2=294979&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java (original)
+++ maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java Tue Oct 4 20:38:41 2005
@@ -82,8 +82,12 @@
// artifactId = maven-foo-archetype
// version = latest
- public void createArchetype( String archetypeGroupId, String archetypeArtifactId, String archetypeVersion,
- ArtifactRepository localRepository, List remoteRepositories, Map parameters )
+ public void createArchetype( String archetypeGroupId,
+ String archetypeArtifactId,
+ String archetypeVersion,
+ ArtifactRepository localRepository,
+ List remoteRepositories,
+ Map parameters )
throws ArchetypeNotFoundException, ArchetypeDescriptorException, ArchetypeTemplateProcessingException
{
// ----------------------------------------------------------------------
@@ -107,15 +111,11 @@
// ---------------------------------------------------------------------
if ( getLogger().isInfoEnabled() )
{
-
if ( !parameters.isEmpty() )
{
-
getLogger().info( "----------------------------------------------------------------------------" );
- getLogger().info(
- "Using following parameters for creating Archetype: " + archetypeArtifactId + ":"
- + archetypeVersion );
+ getLogger().info( "Using following parameters for creating Archetype: " + archetypeArtifactId + ":" + archetypeVersion );
getLogger().info( "----------------------------------------------------------------------------" );
@@ -125,33 +125,23 @@
while ( it.hasNext() )
{
-
String parameterName = (String) it.next();
String parameterValue = (String) parameters.get( parameterName );
getLogger().info( "Parameter: " + parameterName + ", Value: " + parameterValue );
-
}
-
}
else
{
-
getLogger().info( "No Parameters found for creating Archetype" );
-
}
-
}
// ----------------------------------------------------------------------
// Load the descriptor
// ----------------------------------------------------------------------
- String outputDirectory = (String) parameters.get( "outputDirectory" );
-
- String packageName = (String) parameters.get( "package" );
-
ArchetypeDescriptorBuilder builder = new ArchetypeDescriptorBuilder();
ArchetypeDescriptor descriptor = null;
@@ -181,6 +171,38 @@
}
// ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ String basedir = (String) parameters.get( "basedir" );
+
+ String artifactId = (String) parameters.get( "artifactId" );
+
+ File pomFile = new File( basedir, ARCHETYPE_POM );
+
+ File outputDirectoryFile;
+
+ if ( pomFile.exists() && descriptor.isAllowPartial() )
+ {
+ outputDirectoryFile = new File( basedir );
+ }
+ else
+ {
+ outputDirectoryFile = new File( basedir, artifactId );
+
+ if ( outputDirectoryFile.exists() )
+ {
+ throw new ArchetypeTemplateProcessingException( outputDirectoryFile.getName() + " already exists - please run from a clean directory" );
+ }
+
+ pomFile = new File( outputDirectoryFile, ARCHETYPE_POM );
+ }
+
+ String outputDirectory = outputDirectoryFile.getAbsolutePath();
+
+ String packageName = (String) parameters.get( "package" );
+
+ // ----------------------------------------------------------------------
// Set up the Velocity context
// ----------------------------------------------------------------------
@@ -207,110 +229,149 @@
try
{
- processTemplate( outputDirectory, context, ARCHETYPE_POM, false, null );
+ if ( !pomFile.exists() )
+ {
+ processTemplate( outputDirectory, context, ARCHETYPE_POM, false, null );
+ }
// ---------------------------------------------------------------------
// Model generated for the new archetype, so process it now
// ---------------------------------------------------------------------
- File pomFile = new File( outputDirectory + "/" + ARCHETYPE_POM );
+
FileReader pomReader = new FileReader( pomFile );
+
MavenXpp3Reader reader = new MavenXpp3Reader();
+
Model generatedModel = reader.read( pomReader );
// XXX: Following POM processing block may be a candidate for
// refactoring out into service methods or moving to
// createProjectDirectoryStructure(outputDirectory)
Build build = null;
- boolean bOverrideSrcDir = false;
- boolean bOverrideScriptSrcDir = false;
- boolean bOverrideResourceDir = false;
- boolean bOverrideTestSrcDir = false;
- boolean bOverrideTestResourceDir = false;
- boolean bFoundBuildElement = ( null != ( build = generatedModel.getBuild() ) );
+
+ boolean overrideSrcDir = false;
+
+ boolean overrideScriptSrcDir = false;
+
+ boolean overrideResourceDir = false;
+
+ boolean overrideTestSrcDir = false;
+
+ boolean overrideTestResourceDir = false;
+
+ boolean foundBuildElement = ( null != ( build = generatedModel.getBuild() ) );
if ( getLogger().isDebugEnabled() )
- getLogger()
- .debug(
- "********************* Debug info for resources created from generated Model ***********************" );
+ {
+ getLogger().debug( "********************* Debug info for resources created from generated Model ***********************" );
+ }
if ( getLogger().isDebugEnabled() )
- getLogger().debug( "Was build element found in generated POM?: " + bFoundBuildElement );
+ {
+ getLogger().debug( "Was build element found in generated POM?: " + foundBuildElement );
+ }
// create source directory if specified in POM
- if ( bFoundBuildElement && null != build.getSourceDirectory() )
+ if ( foundBuildElement && null != build.getSourceDirectory() )
{
if ( getLogger().isDebugEnabled() )
+ {
getLogger().debug( "Overriding default source directory " );
- bOverrideSrcDir = true;
+ }
+
+ overrideSrcDir = true;
+
String srcDirectory = build.getSourceDirectory();
+
srcDirectory = StringUtils.replace( srcDirectory, "\\", "/" );
- FileUtils.mkdir( outputDirectory
- + ( srcDirectory.startsWith( "/" ) ? srcDirectory : ( "/" + srcDirectory ) ) );
+
+ FileUtils.mkdir( outputDirectory + ( srcDirectory.startsWith( "/" ) ? srcDirectory : ( "/" + srcDirectory ) ) );
}
// create script source directory if specified in POM
- if ( bFoundBuildElement && null != build.getScriptSourceDirectory() )
+ if ( foundBuildElement && null != build.getScriptSourceDirectory() )
{
if ( getLogger().isDebugEnabled() )
+ {
getLogger().debug( "Overriding default script source directory " );
- bOverrideScriptSrcDir = true;
+ }
+
+ overrideScriptSrcDir = true;
+
String scriptSourceDirectory = build.getScriptSourceDirectory();
+
scriptSourceDirectory = StringUtils.replace( scriptSourceDirectory, "\\", "/" );
- FileUtils.mkdir( outputDirectory
- + ( scriptSourceDirectory.startsWith( "/" ) ? scriptSourceDirectory
- : ( "/" + scriptSourceDirectory ) ) );
+ FileUtils.mkdir( outputDirectory + ( scriptSourceDirectory.startsWith( "/" ) ? scriptSourceDirectory
+ : ( "/" + scriptSourceDirectory ) ) );
}
// create resource director(y/ies) if specified in POM
- if ( bFoundBuildElement && build.getResources().size() > 0 )
+ if ( foundBuildElement && build.getResources().size() > 0 )
{
if ( getLogger().isDebugEnabled() )
+ {
getLogger().info( "Overriding default resource directory " );
- bOverrideResourceDir = true;
+ }
+
+ overrideResourceDir = true;
+
Iterator resourceItr = build.getResources().iterator();
+
while ( resourceItr.hasNext() )
{
Resource resource = (Resource) resourceItr.next();
+
String resourceDirectory = resource.getDirectory();
+
resourceDirectory = StringUtils.replace( resourceDirectory, "\\", "/" );
- FileUtils.mkdir( outputDirectory
- + ( resourceDirectory.startsWith( "/" ) ? resourceDirectory : ( "/" + resourceDirectory ) ) );
+
+ FileUtils.mkdir( outputDirectory + ( resourceDirectory.startsWith( "/" ) ? resourceDirectory : ( "/" + resourceDirectory ) ) );
}
}
// create test source directory if specified in POM
- if ( bFoundBuildElement && null != build.getTestSourceDirectory() )
+ if ( foundBuildElement && null != build.getTestSourceDirectory() )
{
if ( getLogger().isDebugEnabled() )
+ {
getLogger().debug( "Overriding default test directory " );
- bOverrideTestSrcDir = true;
+ }
+
+ overrideTestSrcDir = true;
+
String testDirectory = build.getTestSourceDirectory();
+
testDirectory = StringUtils.replace( testDirectory, "\\", "/" );
- FileUtils.mkdir( outputDirectory
- + ( testDirectory.startsWith( "/" ) ? testDirectory : ( "/" + testDirectory ) ) );
+
+ FileUtils.mkdir( outputDirectory + ( testDirectory.startsWith( "/" ) ? testDirectory : ( "/" + testDirectory ) ) );
}
// create test resource directory if specified in POM
- if ( bFoundBuildElement && build.getTestResources().size() > 0 )
+ if ( foundBuildElement && build.getTestResources().size() > 0 )
{
if ( getLogger().isDebugEnabled() )
+ {
getLogger().debug( "Overriding default test resource directory " );
- bOverrideTestResourceDir = true;
+ }
+
+ overrideTestResourceDir = true;
+
Iterator testResourceItr = build.getTestResources().iterator();
+
while ( testResourceItr.hasNext() )
{
Resource resource = (Resource) testResourceItr.next();
+
String testResourceDirectory = resource.getDirectory();
+
testResourceDirectory = StringUtils.replace( testResourceDirectory, "\\", "/" );
- FileUtils.mkdir( outputDirectory
- + ( testResourceDirectory.startsWith( "/" ) ? testResourceDirectory
+
+ FileUtils.mkdir( outputDirectory + ( testResourceDirectory.startsWith( "/" ) ? testResourceDirectory
: ( "/" + testResourceDirectory ) ) );
}
}
- getLogger()
- .info(
- "********************* End of debug info from resources from generated POM ***********************" );
+ getLogger().info( "********************* End of debug info from resources from generated POM ***********************" );
// ----------------------------------------------------------------------
// Main
@@ -318,7 +379,7 @@
if ( descriptor.getSources().size() > 0 )
{
- if ( !bOverrideSrcDir )
+ if ( !overrideSrcDir )
{
FileUtils.mkdir( outputDirectory + DEFAULT_SOURCE_DIR );
}
@@ -327,7 +388,7 @@
if ( descriptor.getResources().size() > 0 )
{
- if ( !bOverrideResourceDir )
+ if ( !overrideResourceDir )
{
FileUtils.mkdir( outputDirectory + DEFAULT_RESOURCE_DIR );
}
@@ -340,7 +401,7 @@
if ( descriptor.getTestSources().size() > 0 )
{
- if ( !bOverrideTestSrcDir )
+ if ( !overrideTestSrcDir )
{
FileUtils.mkdir( outputDirectory + DEFAULT_TEST_SOURCE_DIR );
}
@@ -350,7 +411,7 @@
if ( descriptor.getTestResources().size() > 0 )
{
- if ( !bOverrideTestResourceDir )
+ if ( !overrideTestResourceDir )
{
FileUtils.mkdir( outputDirectory + DEFAULT_TEST_RESOURCE_DIR );
}
Modified: maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/ArchetypeDescriptor.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/ArchetypeDescriptor.java?rev=294979&r1=294978&r2=294979&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/ArchetypeDescriptor.java (original)
+++ maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/ArchetypeDescriptor.java Tue Oct 4 20:38:41 2005
@@ -33,6 +33,14 @@
private List siteResources;
+ /**
+ * This indicates the archetype can be a whole project or can be part
+ * of another project. An example is a site archetype where the POM and
+ * directory structure may already exist and you simply want to generate
+ * the site directory structure.
+ */
+ private boolean allowPartial;
+
public ArchetypeDescriptor()
{
sources = new ArrayList();
@@ -108,6 +116,16 @@
public List getSiteResources()
{
return siteResources;
+ }
+
+ public boolean isAllowPartial()
+ {
+ return allowPartial;
+ }
+
+ public void setAllowPartial( boolean allowPartial )
+ {
+ this.allowPartial = allowPartial;
}
}
Modified: maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/ArchetypeDescriptorBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/ArchetypeDescriptorBuilder.java?rev=294979&r1=294978&r2=294979&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/ArchetypeDescriptorBuilder.java (original)
+++ maven/components/trunk/maven-archetype/maven-archetype-core/src/main/java/org/apache/maven/archetype/descriptor/ArchetypeDescriptorBuilder.java Tue Oct 4 20:38:41 2005
@@ -36,6 +36,18 @@
descriptor.setId( dom.getChild( "id" ).getValue() );
+ Xpp3Dom allowPartialDom = dom.getChild( "allowPartial" );
+
+ if ( allowPartialDom != null )
+ {
+ String allowPartial = allowPartialDom.getValue();
+
+ if ( allowPartial.equals( "true" ) || allowPartial.equals( "1" ) || allowPartial.equals( "on" ) )
+ {
+ descriptor.setAllowPartial( true );
+ }
+ }
+
// ----------------------------------------------------------------------
// Main
// ----------------------------------------------------------------------
Modified: maven/components/trunk/maven-archetype/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java?rev=294979&r1=294978&r2=294979&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java (original)
+++ maven/components/trunk/maven-archetype/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java Tue Oct 4 20:38:41 2005
@@ -51,27 +51,32 @@
parameters.put( "package", "org.apache.maven.quickstart" );
- parameters.put( "outputDirectory", new File( getBasedir(), "target/archetype" ).getPath() );
+ parameters.put( "basedir", getTestFile( "target" ).getAbsolutePath() );
// ----------------------------------------------------------------------
// This needs to be encapsulated in a maven test case.
// ----------------------------------------------------------------------
- ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) container.lookup( ArtifactRepositoryLayout.ROLE,
- "legacy" );
+ ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) container.lookup( ArtifactRepositoryLayout.ROLE, "legacy" );
String mavenRepoLocal = getTestFile( "target/local-repository" ).toURL().toString();
+
ArtifactRepository localRepository = new DefaultArtifactRepository( "local", mavenRepoLocal, layout );
List remoteRepositories = new ArrayList();
String mavenRepoRemote = getTestFile( "src/test/repository" ).toURL().toString();
+
ArtifactRepository remoteRepository = new DefaultArtifactRepository( "remote", mavenRepoRemote, layout );
remoteRepositories.add( remoteRepository );
- archetype.createArchetype( "org.apache.maven.archetypes", "maven-archetype-quickstart", "1.0-alpha-1-SNAPSHOT",
- localRepository, remoteRepositories, parameters );
+ archetype.createArchetype( "org.apache.maven.archetypes",
+ "maven-archetype-quickstart",
+ "1.0-alpha-1-SNAPSHOT",
+ localRepository,
+ remoteRepositories,
+ parameters );
// TODO: validate output
}
Modified: maven/components/trunk/maven-archetype/maven-archetype-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/maven-archetype-plugin/pom.xml?rev=294979&r1=294978&r2=294979&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/maven-archetype-plugin/pom.xml (original)
+++ maven/components/trunk/maven-archetype/maven-archetype-plugin/pom.xml Tue Oct 4 20:38:41 2005
@@ -22,4 +22,4 @@
<version>1.0-alpha-4-SNAPSHOT</version>
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
Modified: maven/components/trunk/maven-archetype/maven-archetype-plugin/src/main/java/org/apache/maven/plugin/archetype/MavenArchetypeMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/maven-archetype-plugin/src/main/java/org/apache/maven/plugin/archetype/MavenArchetypeMojo.java?rev=294979&r1=294978&r2=294979&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/maven-archetype-plugin/src/main/java/org/apache/maven/plugin/archetype/MavenArchetypeMojo.java (original)
+++ maven/components/trunk/maven-archetype/maven-archetype-plugin/src/main/java/org/apache/maven/plugin/archetype/MavenArchetypeMojo.java Tue Oct 4 20:38:41 2005
@@ -118,34 +118,31 @@
String basedir = System.getProperty( "user.dir" );
- // TODO: allow this to be configured
- File outputDirectory = new File( basedir, artifactId );
-
- if ( outputDirectory.exists() )
- {
- throw new MojoExecutionException( outputDirectory.getName() +
- " already exists - please run from a clean directory" );
- }
-
if ( packageName == null )
{
getLog().info( "Defaulting package to group ID: " + groupId );
+
packageName = groupId;
}
// TODO: context mojo more appropriate?
Map map = new HashMap();
- map.put( "outputDirectory", outputDirectory.getAbsolutePath() );
+
+ map.put( "basedir", basedir );
+
map.put( "package", packageName );
+
map.put( "packageName", packageName );
+
map.put( "groupId", groupId );
+
map.put( "artifactId", artifactId );
+
map.put( "version", version );
try
{
- archetype.createArchetype( archetypeGroupId, archetypeArtifactId, archetypeVersion, localRepository,
- remoteRepositories, map );
+ archetype.createArchetype( archetypeGroupId, archetypeArtifactId, archetypeVersion, localRepository, remoteRepositories, map );
}
catch ( ArchetypeNotFoundException e )
{
Modified: maven/components/trunk/maven-archetype/maven-archetypes/maven-archetype-site/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/maven-archetypes/maven-archetype-site/pom.xml?rev=294979&r1=294978&r2=294979&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/maven-archetypes/maven-archetype-site/pom.xml (original)
+++ maven/components/trunk/maven-archetype/maven-archetypes/maven-archetype-site/pom.xml Tue Oct 4 20:38:41 2005
@@ -9,5 +9,5 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-archetype-site</artifactId>
- <version>1.0-alpha-3-SNAPSHOT</version>
+ <version>1.0-alpha-4-SNAPSHOT</version>
</project>
Modified: maven/components/trunk/maven-archetype/maven-archetypes/maven-archetype-site/src/main/resources/META-INF/archetype.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/maven-archetypes/maven-archetype-site/src/main/resources/META-INF/archetype.xml?rev=294979&r1=294978&r2=294979&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/maven-archetypes/maven-archetype-site/src/main/resources/META-INF/archetype.xml (original)
+++ maven/components/trunk/maven-archetype/maven-archetypes/maven-archetype-site/src/main/resources/META-INF/archetype.xml Tue Oct 4 20:38:41 2005
@@ -1,5 +1,6 @@
<archetype>
<id>plugin</id>
+ <allowPartial>true</allowPartial>
<siteResources>
<resource>src/site/site.xml</resource>
<resource>src/site/site_fr.xml</resource>
Modified: maven/components/trunk/maven-archetype/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-archetype/pom.xml?rev=294979&r1=294978&r2=294979&view=diff
==============================================================================
--- maven/components/trunk/maven-archetype/pom.xml (original)
+++ maven/components/trunk/maven-archetype/pom.xml Tue Oct 4 20:38:41 2005
@@ -13,4 +13,4 @@
<module>maven-archetype-plugin</module>
<module>maven-archetypes</module>
</modules>
-</project>
\ No newline at end of file
+</project>