On 14-Feb-08, at 4:57 PM, Carlos Sanchez wrote:

Reading carefully the javadoc I see the mistakes i made in clone :( I
can fix that

The problem arised with a delegate pattern implementation, the
MavenProject instance is encapsulated [1], but the problem comes with
other classes using this constructor to make copies, which will ignore
any customizations made in the delegating object (the subclass).

If the way to make a copy where defined in a method ( clone() seems to
be the right one ) then subclasses could just override that method and
there wouldnt be any need of getters/setters, but right now that
constructor is used in the maven archiver.

In the Archiver?? That just sounds wrong. It should be more of extracting the information necessary from the POM and passing that in as a set of attributes to be used by the Archiver.

Adding the getters and
setters is a patch until the other classes are updated to use clone()
and to keep backwards compatibility.

[1] http://tinyurl.com/29jzte


On Thu, Feb 14, 2008 at 4:15 PM, Brett Porter <[EMAIL PROTECTED]> wrote:
Carlos,

Can you elaborate on the need for this?

I understand that since MavenProject is non-final and so are the get/
sets they can be overridden and so we should be using the get/set
internally. However, it would seem we don't need that funcationality
for every field - which particular ones do you see as needing to be
overridden?

Also, I don't think the clone() stuff is right:
- you've deprecated the copy constructor even though it is still
useful. You also require it's existence which means it shouldn't be
deprecated.
- clone()'s contract says that it doesn't call any constructors,
making the method work but not as documented by the JDK
- clone() should call super.clone() to get a valid MavenProject instance
- MavenProject doesn't implement clonable
Why did you need clone()?

Thanks,
Brett

On 14/02/2008, at 5:40 PM, [EMAIL PROTECTED] wrote:

Author: carlos
Date: Wed Feb 13 22:40:35 2008
New Revision: 627675

URL: http://svn.apache.org/viewvc?rev=627675&view=rev
Log:
[MNG-3400] MavenProject is not extensible. Merge rev 627670 from trunk

Modified:
  maven/components/branches/maven-2.0.x/maven-project/src/main/java/
org/apache/maven/project/MavenProject.java
  maven/components/branches/maven-2.0.x/maven-project/src/test/java/
org/apache/maven/project/MavenProjectTest.java

Modified: maven/components/branches/maven-2.0.x/maven-project/src/
main/java/org/apache/maven/project/MavenProject.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=627675&r1=627674&r2=627675&view=diff
=
=
=
=
=
=
=
=
= = ====================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/
java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/
java/org/apache/maven/project/MavenProject.java Wed Feb 13 22:40:35
2008
@@ -158,103 +158,107 @@
       model.setArtifactId( EMPTY_PROJECT_ARTIFACT_ID );
       model.setVersion( EMPTY_PROJECT_VERSION );

-        this.model = model;
+        this.setModel( model );
   }

   public MavenProject( Model model )
   {
-        this.model = model;
+        this.setModel( model );
   }

+    /**
+     * @deprecated use [EMAIL PROTECTED] #clone()}
+     */
   public MavenProject( MavenProject project )
   {
       // disown the parent

       // copy fields
-        this.file = project.file;
+        setFile( project.getFile() );

- // don't need a deep copy, they don't get modified or added/
removed to/from - but make them unmodifiable to be sure!
-        if ( project.dependencyArtifacts != null )
+ // don't need a deep copy, they don't get modified or added/
removed to/from - but make them unmodifiable to be
+        // sure!
+        if ( project.getDependencyArtifacts() != null )
       {
-            this.dependencyArtifacts =
Collections.unmodifiableSet( project.dependencyArtifacts );
+
setDependencyArtifacts
( Collections.unmodifiableSet( project.getDependencyArtifacts() ) );
       }
-
-        if ( project.artifacts != null )
+
+        if ( project.getArtifacts() != null )
       {
-            this.artifacts =
Collections.unmodifiableSet( project.artifacts );
+
setArtifacts ( Collections.unmodifiableSet( project.getArtifacts() ) );
       }
-
-        if ( project.pluginArtifacts != null )
+
+        if ( project.getPluginArtifacts() != null )
       {
-            this.pluginArtifacts =
Collections.unmodifiableSet( project.pluginArtifacts );
+
setPluginArtifacts
( Collections.unmodifiableSet( project.getPluginArtifacts() ) );
       }
-
-        if ( project.reportArtifacts != null )
+
+        if ( project.getReportArtifacts() != null )
       {
-            this.reportArtifacts =
Collections.unmodifiableSet( project.reportArtifacts );
-        }
-
-        if ( project.extensionArtifacts != null )
+
setReportArtifacts
( Collections.unmodifiableSet( project.getReportArtifacts() ) );
+        }
+
+        if ( project.getExtensionArtifacts() != null )
       {
-            this.extensionArtifacts =
Collections.unmodifiableSet( project.extensionArtifacts );
-        }
-
-        this.parentArtifact = project.parentArtifact;
+
setExtensionArtifacts
( Collections.unmodifiableSet( project.getExtensionArtifacts() ) );
+        }
+
+        setParentArtifact( ( project.getParentArtifact() ) );

-        if ( project.remoteArtifactRepositories != null )
+        if ( project.getRemoteArtifactRepositories() != null )
       {
-            this.remoteArtifactRepositories =
Collections.unmodifiableList( project.remoteArtifactRepositories );
-        }
-
-        if ( project.pluginArtifactRepositories != null )
+
setRemoteArtifactRepositories
( Collections
.unmodifiableList( project.getRemoteArtifactRepositories() ) );
+        }
+
+        if ( project.getPluginArtifactRepositories() != null )
       {
-            this.pluginArtifactRepositories =
Collections.unmodifiableList( project.pluginArtifactRepositories );
-        }
-
-        if ( project.collectedProjects != null )
+
setPluginArtifactRepositories
( ( Collections
.unmodifiableList( project.getPluginArtifactRepositories() ) ) );
+        }
+
+        if ( project.getCollectedProjects() != null )
       {
-            this.collectedProjects =
Collections.unmodifiableList( project.collectedProjects );
-        }
-
-        if ( project.activeProfiles != null )
+
setCollectedProjects
( ( Collections
.unmodifiableList( project.getCollectedProjects() ) ) );
+        }
+
+        if ( project.getActiveProfiles() != null )
       {
-            this.activeProfiles =
Collections.unmodifiableList( project.activeProfiles );
-        }
-
+
setActiveProfiles
( ( Collections.unmodifiableList( project.getActiveProfiles() ) ) );
+        }
+
       if ( project.getAttachedArtifacts() != null )
       {
           // clone properties modifyable by plugins in a forked
lifecycle
-            this.attachedArtifacts = new
ArrayList( project.getAttachedArtifacts() );
-        }
-
-        if ( project.compileSourceRoots != null )
+            setAttachedArtifacts( new
ArrayList( project.getAttachedArtifacts() ) );
+        }
+
+        if ( project.getCompileSourceRoots() != null )
       {
           // clone source roots
-            this.compileSourceRoots = new
ArrayList( project.compileSourceRoots );
-        }
-
-        if ( project.testCompileSourceRoots != null )
+            setCompileSourceRoots( ( new
ArrayList( project.getCompileSourceRoots() ) ) );
+        }
+
+        if ( project.getTestCompileSourceRoots() != null )
       {
-            this.testCompileSourceRoots = new
ArrayList( project.testCompileSourceRoots );
-        }
-
-        if ( project.scriptSourceRoots != null )
+            setTestCompileSourceRoots( ( new
ArrayList( project.getTestCompileSourceRoots() ) ) );
+        }
+
+        if ( project.getScriptSourceRoots() != null )
       {
-            this.scriptSourceRoots = new
ArrayList( project.scriptSourceRoots );
-        }
-
-        this.model = ModelUtils.cloneModel( project.model );
+            setScriptSourceRoots( ( new
ArrayList( project.getScriptSourceRoots() ) ) );
+        }

-        if ( project.originalModel != null )
+ setModel( ( ModelUtils.cloneModel( project.getModel() ) ) );
+
+        if ( project.getOriginalModel() != null )
       {
-            this.originalModel =
ModelUtils.cloneModel( project.originalModel );
+
setOriginalModel
( ( ModelUtils.cloneModel( project.getOriginalModel() ) ) );
       }

-        this.executionRoot = project.executionRoot;
+        setExecutionRoot( project.isExecutionRoot() );

-        if ( project.artifact != null )
+        if ( project.getArtifact() != null )
       {
-            this.artifact =
ArtifactUtils.copyArtifact( project.artifact );
+
setArtifact( ArtifactUtils.copyArtifact( project.getArtifact() ) );
       }

       if ( project.getManagedVersionMap() != null )
@@ -262,14 +266,14 @@
           setManagedVersionMap( new
ManagedVersionMap( project.getManagedVersionMap() ) );
       }

-        if ( project.releaseArtifactRepository != null )
+        if ( project.getReleaseArtifactRepository() != null )
       {
-            releaseArtifactRepository =
project.releaseArtifactRepository;
+
setReleaseArtifactRepository
( project.getReleaseArtifactRepository() );
       }

-        if ( project.snapshotArtifactRepository != null )
+        if ( project.getSnapshotArtifactRepository() != null )
       {
-            snapshotArtifactRepository =
project.snapshotArtifactRepository;
+
setSnapshotArtifactRepository
( project.getSnapshotArtifactRepository() );
       }
   }

@@ -403,17 +407,17 @@

   public void setDependencies( List dependencies )
   {
-        model.setDependencies( dependencies );
+        getModel().setDependencies( dependencies );
   }

   public List getDependencies()
   {
-        return model.getDependencies();
+        return getModel().getDependencies();
   }

   public DependencyManagement getDependencyManagement()
   {
-        return model.getDependencyManagement();
+        return getModel().getDependencyManagement();
   }

   //
----------------------------------------------------------------------
@@ -427,9 +431,9 @@
           path = path.trim();
           if ( path.length() != 0 )
           {
-                if ( !compileSourceRoots.contains( path ) )
+                if ( !getCompileSourceRoots().contains( path ) )
               {
-                    compileSourceRoots.add( path );
+                    getCompileSourceRoots().add( path );
               }
           }
       }
@@ -442,9 +446,9 @@
           path = path.trim();
           if ( path.length() != 0 )
           {
-                if ( !scriptSourceRoots.contains( path ) )
+                if ( !getScriptSourceRoots().contains( path ) )
               {
-                    scriptSourceRoots.add( path );
+                    getScriptSourceRoots().add( path );
               }
           }
       }
@@ -457,9 +461,9 @@
           path = path.trim();
           if ( path.length() != 0 )
           {
-                if ( !testCompileSourceRoots.contains( path ) )
+ if ( ! getTestCompileSourceRoots().contains( path ) )
               {
-                    testCompileSourceRoots.add( path );
+                    getTestCompileSourceRoots().add( path );
               }
           }
       }
@@ -821,31 +825,31 @@

   public void setModelVersion( String pomVersion )
   {
-        model.setModelVersion( pomVersion );
+        getModel().setModelVersion( pomVersion );
   }

   public String getModelVersion()
   {
-        return model.getModelVersion();
+        return getModel().getModelVersion();
   }

   public String getId()
   {
-        return model.getId();
+        return getModel().getId();
   }

   public void setGroupId( String groupId )
   {
-        model.setGroupId( groupId );
+        getModel().setGroupId( groupId );
   }

   public String getGroupId()
   {
-        String groupId = model.getGroupId();
-
-        if ( groupId == null && model.getParent() != null )
+        String groupId = getModel().getGroupId();
+
+        if ( ( groupId == null ) && ( getModel().getParent() !=
null ) )
       {
-            groupId = model.getParent().getGroupId();
+            groupId = getModel().getParent().getGroupId();
       }

       return groupId;
@@ -853,25 +857,25 @@

   public void setArtifactId( String artifactId )
   {
-        model.setArtifactId( artifactId );
+        getModel().setArtifactId( artifactId );
   }

   public String getArtifactId()
   {
-        return model.getArtifactId();
+        return getModel().getArtifactId();
   }

   public void setName( String name )
   {
-        model.setName( name );
+        getModel().setName( name );
   }

   public String getName()
   {
       // TODO: this should not be allowed to be null.
-        if ( model.getName() != null )
+        if ( getModel().getName() != null )
       {
-            return model.getName();
+            return getModel().getName();
       }
       else
       {
@@ -881,16 +885,16 @@

   public void setVersion( String version )
   {
-        model.setVersion( version );
+        getModel().setVersion( version );
   }

   public String getVersion()
   {
-        String version = model.getVersion();
-
-        if ( version == null && model.getParent() != null )
+        String version = getModel().getVersion();
+
+        if ( ( version == null ) && ( getModel().getParent() !=
null ) )
       {
-            version = model.getParent().getVersion();
+            version = getModel().getParent().getVersion();
       }

       return version;
@@ -898,149 +902,149 @@

   public String getPackaging()
   {
-        return model.getPackaging();
+        return getModel().getPackaging();
   }

   public void setPackaging( String packaging )
   {
-        model.setPackaging( packaging );
+        getModel().setPackaging( packaging );
   }

   public void setInceptionYear( String inceptionYear )
   {
-        model.setInceptionYear( inceptionYear );
+        getModel().setInceptionYear( inceptionYear );
   }

   public String getInceptionYear()
   {
-        return model.getInceptionYear();
+        return getModel().getInceptionYear();
   }

   public void setUrl( String url )
   {
-        model.setUrl( url );
+        getModel().setUrl( url );
   }

   public String getUrl()
   {
-        return model.getUrl();
+        return getModel().getUrl();
   }

   public Prerequisites getPrerequisites()
   {
-        return model.getPrerequisites();
+        return getModel().getPrerequisites();
   }

   public void setIssueManagement( IssueManagement issueManagement )
   {
-        model.setIssueManagement( issueManagement );
+        getModel().setIssueManagement( issueManagement );
   }

   public CiManagement getCiManagement()
   {
-        return model.getCiManagement();
+        return getModel().getCiManagement();
   }

   public void setCiManagement( CiManagement ciManagement )
   {
-        model.setCiManagement( ciManagement );
+        getModel().setCiManagement( ciManagement );
   }

   public IssueManagement getIssueManagement()
   {
-        return model.getIssueManagement();
+        return getModel().getIssueManagement();
   }

   public void setDistributionManagement( DistributionManagement
distributionManagement )
   {
-        model.setDistributionManagement( distributionManagement );
+
getModel().setDistributionManagement( distributionManagement );
   }

   public DistributionManagement getDistributionManagement()
   {
-        return model.getDistributionManagement();
+        return getModel().getDistributionManagement();
   }

   public void setDescription( String description )
   {
-        model.setDescription( description );
+        getModel().setDescription( description );
   }

   public String getDescription()
   {
-        return model.getDescription();
+        return getModel().getDescription();
   }

   public void setOrganization( Organization organization )
   {
-        model.setOrganization( organization );
+        getModel().setOrganization( organization );
   }

   public Organization getOrganization()
   {
-        return model.getOrganization();
+        return getModel().getOrganization();
   }

   public void setScm( Scm scm )
   {
-        model.setScm( scm );
+        getModel().setScm( scm );
   }

   public Scm getScm()
   {
-        return model.getScm();
+        return getModel().getScm();
   }

   public void setMailingLists( List mailingLists )
   {
-        model.setMailingLists( mailingLists );
+        getModel().setMailingLists( mailingLists );
   }

   public List getMailingLists()
   {
-        return model.getMailingLists();
+        return getModel().getMailingLists();
   }

   public void addMailingList( MailingList mailingList )
   {
-        model.addMailingList( mailingList );
+        getModel().addMailingList( mailingList );
   }

   public void setDevelopers( List developers )
   {
-        model.setDevelopers( developers );
+        getModel().setDevelopers( developers );
   }

   public List getDevelopers()
   {
-        return model.getDevelopers();
+        return getModel().getDevelopers();
   }

   public void addDeveloper( Developer developer )
   {
-        model.addDeveloper( developer );
+        getModel().addDeveloper( developer );
   }

   public void setContributors( List contributors )
   {
-        model.setContributors( contributors );
+        getModel().setContributors( contributors );
   }

   public List getContributors()
   {
-        return model.getContributors();
+        return getModel().getContributors();
   }

   public void addContributor( Contributor contributor )
   {
-        model.addContributor( contributor );
+        getModel().addContributor( contributor );
   }

   public void setBuild( Build build )
   {
       this.buildOverlay = new BuildOverlay( build );

-        model.setBuild( build );
+        getModel().setBuild( build );
   }

   public Build getBuild()
@@ -1075,27 +1079,27 @@

   public void setReporting( Reporting reporting )
   {
-        model.setReporting( reporting );
+        getModel().setReporting( reporting );
   }

   public Reporting getReporting()
   {
-        return model.getReporting();
+        return getModel().getReporting();
   }

   public void setLicenses( List licenses )
   {
-        model.setLicenses( licenses );
+        getModel().setLicenses( licenses );
   }

   public List getLicenses()
   {
-        return model.getLicenses();
+        return getModel().getLicenses();
   }

   public void addLicense( License license )
   {
-        model.addLicense( license );
+        getModel().addLicense( license );
   }

   public void setArtifacts( Set artifacts )
@@ -1206,7 +1210,7 @@

   public List getRepositories()
   {
-        return model.getRepositories();
+        return getModel().getRepositories();
   }

   //
----------------------------------------------------------------------
@@ -1215,33 +1219,33 @@

   public List getReportPlugins()
   {
-        if ( model.getReporting() == null )
+        if ( getModel().getReporting() == null )
       {
           return null;
       }
-        return model.getReporting().getPlugins();
+        return getModel().getReporting().getPlugins();

   }

   public List getBuildPlugins()
   {
-        if ( model.getBuild() == null )
+        if ( getModel().getBuild() == null )
       {
           return null;
       }
-        return model.getBuild().getPlugins();
+        return getModel().getBuild().getPlugins();
   }

   public List getModules()
   {
-        return model.getModules();
+        return getModel().getModules();
   }

   public PluginManagement getPluginManagement()
   {
       PluginManagement pluginMgmt = null;

-        Build build = model.getBuild();
+        Build build = getModel().getBuild();
       if ( build != null )
       {
           pluginMgmt = build.getPluginManagement();
@@ -1252,13 +1256,13 @@

   private Build getModelBuild()
   {
-        Build build = model.getBuild();
+        Build build = getModel().getBuild();

       if ( build == null )
       {
           build = new Build();

-            model.setBuild( build );
+            getModel().setBuild( build );
       }

       return build;
@@ -1322,13 +1326,13 @@

   public ArtifactRepository
getDistributionManagementArtifactRepository()
   {
-        return getArtifact().isSnapshot() &&
snapshotArtifactRepository != null ? snapshotArtifactRepository
-            : releaseArtifactRepository;
+        return getArtifact().isSnapshot() &&
( getSnapshotArtifactRepository() != null ) ?
getSnapshotArtifactRepository()
+            : getReleaseArtifactRepository();
   }

   public List getPluginRepositories()
   {
-        return model.getPluginRepositories();
+        return getModel().getPluginRepositories();
   }

   public void setActiveProfiles( List activeProfiles )
@@ -1624,6 +1628,42 @@
       return getBuild() != null ? getBuild().getDefaultGoal() :
null;
   }

+
+    protected void setModel( Model model )
+    {
+        this.model = model;
+    }
+
+    protected void setAttachedArtifacts( List attachedArtifacts )
+    {
+        this.attachedArtifacts = attachedArtifacts;
+    }
+
+    protected void setCompileSourceRoots( List compileSourceRoots )
+    {
+        this.compileSourceRoots = compileSourceRoots;
+    }
+
+    protected void setTestCompileSourceRoots( List
testCompileSourceRoots )
+    {
+        this.testCompileSourceRoots = testCompileSourceRoots;
+    }
+
+    protected void setScriptSourceRoots( List scriptSourceRoots )
+    {
+        this.scriptSourceRoots = scriptSourceRoots;
+    }
+
+    protected ArtifactRepository getReleaseArtifactRepository()
+    {
+        return releaseArtifactRepository;
+    }
+
+    protected ArtifactRepository getSnapshotArtifactRepository()
+    {
+        return snapshotArtifactRepository;
+    }
+
   public Artifact replaceWithActiveArtifact( Artifact
pluginArtifact )
   {
       if ( getProjectReferences() != null && !
getProjectReferences().isEmpty() )
@@ -1743,6 +1783,14 @@
       }

       return sb.toString();
+    }
+
+    /**
+     * @since 2.0.9
+     */
+    public Object clone()
+    {
+        return new MavenProject( this );
   }

}

Modified: maven/components/branches/maven-2.0.x/maven-project/src/
test/java/org/apache/maven/project/MavenProjectTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java?rev=627675&r1=627674&r2=627675&view=diff
=
=
=
=
=
=
=
=
= = ====================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/test/
java/org/apache/maven/project/MavenProjectTest.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/test/
java/org/apache/maven/project/MavenProjectTest.java Wed Feb 13
22:40:35 2008
@@ -21,15 +21,13 @@

import java.io.File;
import java.io.IOException;
-import java.util.Map;
-import java.util.Iterator;
import java.util.List;
+import java.util.Map;

+import org.apache.maven.artifact.versioning.ManagedVersionMap;
+import org.apache.maven.model.DependencyManagement;
import org.apache.maven.model.Model;
import org.apache.maven.model.Parent;
-import org.apache.maven.model.DependencyManagement;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.artifact.versioning.ManagedVersionMap;

public class MavenProjectTest
   extends AbstractMavenProjectTestCase
@@ -90,20 +88,20 @@
                       + MavenProject.EMPTY_PROJECT_VERSION,
project.getId() );
   }

-    public void testCopyConstructor()
+    public void testClone()
       throws Exception
   {
       File f = getFileForClasspathResource( "canonical-pom.xml" );
       MavenProject projectToClone = getProject( f );

-        MavenProject clonedProject = new
MavenProject( projectToClone );
+        MavenProject clonedProject = (MavenProject)
projectToClone.clone();
       assertEquals( "maven-core", clonedProject.getArtifactId() );
       Map clonedMap = clonedProject.getManagedVersionMap();
       assertNotNull("ManagedVersionMap not copied", clonedMap);
       assertTrue("ManagedVersionMap is not empty",
clonedMap.isEmpty());
   }

-    public void testCopyConstructorWithDependencyManagement()
+    public void testCloneWithDependencyManagement()
       throws Exception
   {
       File f = getFileForClasspathResource( "dependencyManagement-
pom.xml" );
@@ -118,7 +116,7 @@
       assertNotNull("No ManagedVersionMap", map);
       assertTrue("ManagedVersionMap is empty", !map.isEmpty());

-        MavenProject clonedProject = new
MavenProject( projectToClone );
+        MavenProject clonedProject = (MavenProject)
projectToClone.clone();
       assertEquals( "maven-core", clonedProject.getArtifactId() );
       Map clonedMap = clonedProject.getManagedVersionMap();
       assertNotNull("ManagedVersionMap not copied", clonedMap);
@@ -146,13 +144,13 @@
       assertEquals( "..", pathAdjustment );
   }

-    public void testCopyConstructorWithDistributionManagement()
throws Exception
+    public void testCloneWithDistributionManagement() throws
Exception
   {

       File f =
getFileForClasspathResource( "distributionManagement-pom.xml" );
       MavenProject projectToClone = getProject( f );

-        MavenProject clonedProject = new
MavenProject( projectToClone );
+        MavenProject clonedProject = (MavenProject)
projectToClone.clone();
       assertNotNull( "clonedProject - distributionManagement",
clonedProject.getDistributionManagementArtifactRepository() );
   }
}



--
Brett Porter
[EMAIL PROTECTED]
http://blogs.exist.com/bporter/


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--
I could give you my word as a Spaniard.
No good. I've known too many Spaniards.
-- The Princess Bride

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Thanks,

Jason

----------------------------------------------------------
Jason van Zyl
Founder,  Apache Maven
jason at sonatype dot com
----------------------------------------------------------

Selfish deeds are the shortest path to self destruction.

-- The Seven Samuari, Akira Kirosawa



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to