You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2006/04/03 15:53:21 UTC
svn commit: r391046 - in /maven/archetype/trunk/maven-archetype-core:
pom.xml src/main/java/org/apache/maven/archetype/DefaultArchetype.java
src/test/java/org/apache/maven/archetype/ArchetypeTest.java
Author: brett
Date: Mon Apr 3 06:53:19 2006
New Revision: 391046
URL: http://svn.apache.org/viewcvs?rev=391046&view=rev
Log:
clean up rewriting of modules in parent POM
Modified:
maven/archetype/trunk/maven-archetype-core/pom.xml
maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java
maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java
Modified: maven/archetype/trunk/maven-archetype-core/pom.xml
URL: http://svn.apache.org/viewcvs/maven/archetype/trunk/maven-archetype-core/pom.xml?rev=391046&r1=391045&r2=391046&view=diff
==============================================================================
--- maven/archetype/trunk/maven-archetype-core/pom.xml (original)
+++ maven/archetype/trunk/maven-archetype-core/pom.xml Mon Apr 3 06:53:19 2006
@@ -61,5 +61,10 @@
<artifactId>plexus-container-default</artifactId>
<version>1.0-alpha-9</version>
</dependency>
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ <version>1.6.1</version>
+ </dependency>
</dependencies>
</project>
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=391046&r1=391045&r2=391046&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 06:53:19 2006
@@ -39,6 +39,12 @@
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.codehaus.plexus.velocity.VelocityComponent;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.io.SAXReader;
+import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileOutputStream;
@@ -49,6 +55,8 @@
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.StringWriter;
import java.io.Writer;
import java.net.URL;
import java.net.URLClassLoader;
@@ -116,7 +124,7 @@
}
// ---------------------------------------------------------------------
- // Get Logger and display all parameters used
+ // Get Logger and display all parameters used
// ---------------------------------------------------------------------
if ( getLogger().isInfoEnabled() )
{
@@ -320,9 +328,11 @@
Thread.currentThread().setContextClassLoader( old );
}
- // TODO: Reprocessing the parent should retain structure
if ( parentModel != null )
{
+/*
+ // TODO: would be nice to just write out with the xpp3 writer again, except that it loses a bunch of info and
+ // reformats, so the module is just baked in as a string instead.
FileWriter fileWriter = null;
try
@@ -340,6 +350,39 @@
{
IOUtil.close( fileWriter );
}
+*/
+ FileReader fileReader = null;
+ boolean added;
+ StringWriter w = new StringWriter();
+ try
+ {
+ fileReader = new FileReader( parentPomFile );
+ added = addModuleToParentPom( artifactId, fileReader, w );
+ }
+ catch ( IOException e )
+ {
+ throw new ArchetypeTemplateProcessingException( "Unable to rewrite parent POM", e );
+ }
+ catch ( DocumentException e )
+ {
+ throw new ArchetypeTemplateProcessingException( "Unable to rewrite parent POM", e );
+ }
+ finally
+ {
+ IOUtil.close( fileReader );
+ }
+
+ if ( added )
+ {
+ try
+ {
+ FileUtils.fileWrite( parentPomFile.getAbsolutePath(), w.toString() );
+ }
+ catch ( IOException e )
+ {
+ throw new ArchetypeTemplateProcessingException( "Unable to rewrite parent POM", e );
+ }
+ }
}
// ----------------------------------------------------------------------
@@ -350,6 +393,59 @@
getLogger().info( "Archetype created in dir: " + outputDirectory );
}
+ }
+
+ static boolean addModuleToParentPom( String artifactId, Reader fileReader, Writer fileWriter )
+ throws DocumentException, IOException
+ {
+ SAXReader reader = new SAXReader();
+ Document document = reader.read( fileReader );
+ Element project = document.getRootElement();
+ Element modules = project.element( "modules" );
+ if ( modules == null )
+ {
+ modules = project.addText( " " ).addElement( "modules" );
+ modules.setText( "\n " );
+ project.addText( "\n" );
+ }
+ boolean found = false;
+ for ( Iterator i = modules.elementIterator( "module" ); i.hasNext() && !found; )
+ {
+ Element module = (Element) i.next();
+ if ( module.getText().equals( artifactId ) )
+ {
+ found = true;
+ }
+ }
+ if ( !found )
+ {
+ Node lastTextNode = null;
+ for ( Iterator i = modules.nodeIterator(); i.hasNext(); )
+ {
+ Node node = (Node) i.next();
+ if ( node.getNodeType() == Node.ELEMENT_NODE )
+ {
+ lastTextNode = null;
+ }
+ else if ( node.getNodeType() == Node.TEXT_NODE )
+ {
+ lastTextNode = node;
+ }
+ }
+
+ if ( lastTextNode != null )
+ {
+ modules.remove( lastTextNode );
+ }
+
+ modules.addText( "\n " );
+ modules.addElement( "module" ).setText( artifactId );
+ modules.addText( "\n " );
+
+ XMLWriter writer = new XMLWriter( fileWriter );
+ writer.write( document );
+ }
+ return !found;
}
private void processTemplates( File pomFile, String outputDirectory, Context context,
Modified: maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java
URL: http://svn.apache.org/viewcvs/maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java?rev=391046&r1=391045&r2=391046&view=diff
==============================================================================
--- maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java (original)
+++ maven/archetype/trunk/maven-archetype-core/src/test/java/org/apache/maven/archetype/ArchetypeTest.java Mon Apr 3 06:53:19 2006
@@ -32,6 +32,7 @@
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.codehaus.plexus.velocity.VelocityComponent;
+import org.dom4j.DocumentException;
import java.io.File;
import java.io.FileReader;
@@ -53,13 +54,13 @@
public class ArchetypeTest
extends PlexusTestCase
{
+ private Archetype archetype;
+
public void testArchetype()
throws Exception
{
FileUtils.deleteDirectory( getTestFile( "target/quickstart" ) );
- Archetype archetype = (Archetype) lookup( Archetype.ROLE );
-
Map parameters = new HashMap();
parameters.put( "name", "jason" );
@@ -225,5 +226,61 @@
}
return archetypeJarLoader;
+ }
+
+ public void testAddModuleToParentPOM()
+ throws DocumentException, IOException
+ {
+ String pom = "<project>\n</project>";
+
+ StringWriter out = new StringWriter();
+ assertTrue( DefaultArchetype.addModuleToParentPom( "myArtifactId1", new StringReader( pom ), out ) );
+
+ assertEquals( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<project>\n" + " <modules>\n" +
+ " <module>myArtifactId1</module>\n" + " </modules>\n" + "</project>", out.toString() );
+
+ pom = "<project>\n <modelVersion>4.0.0</modelVersion>\n</project>";
+
+ out = new StringWriter();
+ assertTrue( DefaultArchetype.addModuleToParentPom( "myArtifactId2", new StringReader( pom ), out ) );
+
+ assertEquals( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<project>\n" +
+ " <modelVersion>4.0.0</modelVersion>\n" + " <modules>\n" + " <module>myArtifactId2</module>\n" +
+ " </modules>\n" + "</project>", out.toString() );
+
+ pom = "<project><modelVersion>4.0.0</modelVersion>\n" + " <modules>\n" + " </modules>\n" + "</project>";
+
+ out = new StringWriter();
+ assertTrue( DefaultArchetype.addModuleToParentPom( "myArtifactId3", new StringReader( pom ), out ) );
+
+ assertEquals( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project><modelVersion>4.0.0</modelVersion>\n" +
+ " <modules>\n" + " <module>myArtifactId3</module>\n" + " </modules>\n" + "</project>",
+ out.toString() );
+
+ pom = "<project><modelVersion>4.0.0</modelVersion>\n" + " <modules>\n" +
+ " <module>myArtifactId3</module>\n" + " </modules>\n" + "</project>";
+
+ out = new StringWriter();
+ assertTrue( DefaultArchetype.addModuleToParentPom( "myArtifactId4", new StringReader( pom ), out ) );
+
+ assertEquals( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project><modelVersion>4.0.0</modelVersion>\n" +
+ " <modules>\n" + " <module>myArtifactId3</module>\n" + " <module>myArtifactId4</module>\n" +
+ " </modules>\n" + "</project>", out.toString() );
+
+ pom = "<project><modelVersion>4.0.0</modelVersion>\n" + " <modules>\n" +
+ " <module>myArtifactId3</module>\n" + " </modules>\n" + "</project>";
+
+ out = new StringWriter();
+ assertFalse( DefaultArchetype.addModuleToParentPom( "myArtifactId3", new StringReader( pom ), out ) );
+
+ // empty means unchanged
+ assertEquals( "", out.toString() );
+ }
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ archetype = (Archetype) lookup( Archetype.ROLE );
}
}