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 2006/04/08 03:05:22 UTC

svn commit: r392469 - in /maven/plugins/trunk/maven-assembly-plugin: ./ src/it/ src/it/repository-assembly/ src/it/repository-assembly/src/ src/it/repository-assembly/src/assemble/ src/it/repository-assembly/src/main/ src/it/repository-assembly/src/mai...

Author: jvanzyl
Date: Fri Apr  7 18:05:19 2006
New Revision: 392469

URL: http://svn.apache.org/viewcvs?rev=392469&view=rev
Log:
[MASSEMBLY-77] add the ability to assemble a maven repository

Added:
    maven/plugins/trunk/maven-assembly-plugin/src/it/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/plugin/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/plugin/assembly/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/plugin/assembly/test/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/plugin/assembly/test/App.java   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/plugin/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/plugin/assembly/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/plugin/assembly/test/
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/plugin/assembly/test/AppTest.java   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssemblyException.java   (with props)
Modified:
    maven/plugins/trunk/maven-assembly-plugin/pom.xml
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractDirectoryMojo.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo

Modified: maven/plugins/trunk/maven-assembly-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/pom.xml?rev=392469&r1=392468&r2=392469&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-assembly-plugin/pom.xml Fri Apr  7 18:05:19 2006
@@ -58,6 +58,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <version>2.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
       <artifactId>maven-archiver</artifactId>
       <version>2.0</version>
     </dependency>

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml?rev=392469&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml Fri Apr  7 18:05:19 2006
@@ -0,0 +1,29 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugin.assembly.test</groupId>
+  <artifactId>repository-assembly</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <name>Maven Quick Start Archetype</name>
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <configuration>
+          <descriptor>src/assemble/bin.xml</descriptor>
+          <finalName>assembly</finalName>        
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml?rev=392469&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml Fri Apr  7 18:05:19 2006
@@ -0,0 +1,14 @@
+<assembly>
+  <id>bin</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <repositories>
+    <repository>
+      <outputDirectory>repo</outputDirectory>
+      <includes>
+        <include>junit:junit</include>
+      </includes>
+    </repository>
+  </repositories>
+</assembly>

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/plugin/assembly/test/App.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/plugin/assembly/test/App.java?rev=392469&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/plugin/assembly/test/App.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/plugin/assembly/test/App.java Fri Apr  7 18:05:19 2006
@@ -0,0 +1,13 @@
+package org.apache.maven.plugin.assembly.test;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+    }
+}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/plugin/assembly/test/App.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/main/java/org/apache/maven/plugin/assembly/test/App.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/plugin/assembly/test/AppTest.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/plugin/assembly/test/AppTest.java?rev=392469&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/plugin/assembly/test/AppTest.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/plugin/assembly/test/AppTest.java Fri Apr  7 18:05:19 2006
@@ -0,0 +1,38 @@
+package org.apache.maven.plugin.assembly.test;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * 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()
+    {
+        assertTrue( true );
+    }
+}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/plugin/assembly/test/AppTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/test/java/org/apache/maven/plugin/assembly/test/AppTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java?rev=392469&r1=392468&r2=392469&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java Fri Apr  7 18:05:19 2006
@@ -20,10 +20,17 @@
 import org.apache.maven.archiver.MavenArchiver;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.IncludesArtifactFilter;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.assembly.filter.AssemblyScopeArtifactFilter;
@@ -31,17 +38,23 @@
 import org.apache.maven.plugin.assembly.interpolation.AssemblyInterpolator;
 import org.apache.maven.plugin.assembly.interpolation.ReflectionProperties;
 import org.apache.maven.plugin.assembly.utils.PropertyUtils;
+import org.apache.maven.plugin.assembly.repository.RepositoryAssembler;
+import org.apache.maven.plugin.assembly.repository.RepositoryAssemblyException;
 import org.apache.maven.plugins.assembly.model.Assembly;
 import org.apache.maven.plugins.assembly.model.Component;
 import org.apache.maven.plugins.assembly.model.DependencySet;
 import org.apache.maven.plugins.assembly.model.FileItem;
 import org.apache.maven.plugins.assembly.model.FileSet;
+import org.apache.maven.plugins.assembly.model.Repository;
 import org.apache.maven.plugins.assembly.model.io.xpp3.AssemblyXpp3Reader;
 import org.apache.maven.plugins.assembly.model.io.xpp3.ComponentXpp3Reader;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectHelper;
 import org.apache.maven.wagon.PathUtils;
 import org.apache.maven.shared.model.fileset.util.FileSetManager;
+import org.apache.maven.model.RepositoryPolicy;
+import org.apache.maven.model.RepositoryBase;
+import org.apache.maven.execution.MavenSession;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
 import org.codehaus.plexus.archiver.jar.JarArchiver;
@@ -58,6 +71,7 @@
 import org.codehaus.plexus.util.InterpolationFilterReader;
 import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
@@ -69,8 +83,6 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
-import java.io.FileInputStream;
-import java.io.PrintWriter;
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -212,6 +224,11 @@
     private Properties filterProperties;
 
     /**
+     * @component
+     */
+    private RepositoryAssembler repositoryAssembler;
+
+    /**
      * Create the binary distribution.
      *
      * @throws org.apache.maven.plugin.MojoExecutionException
@@ -274,6 +291,14 @@
             {
                 throw new MojoExecutionException( "Error creating assembly: " + e.getMessage(), e );
             }
+            catch ( RepositoryAssemblyException e )
+            {
+                throw new MojoExecutionException( "Error creating assembly: " + e.getMessage(), e );
+            }
+            catch ( InvalidRepositoryException e )
+            {
+                throw new MojoExecutionException( "Error creating assembly: " + e.getMessage(), e );
+            }
 
             if ( appendAssemblyId )
             {
@@ -314,8 +339,9 @@
     }
 
     protected File createArchive( Archiver archiver, Assembly assembly, String filename )
-        throws ArchiverException, IOException, MojoExecutionException, MojoFailureException, XmlPullParserException
+        throws ArchiverException, IOException, MojoExecutionException, MojoFailureException, XmlPullParserException, RepositoryAssemblyException, InvalidRepositoryException
     {
+        processRepositories( archiver, assembly.getRepositories(), assembly.isIncludeBaseDirectory() );
         processDependencySets( archiver, assembly.getDependencySets(), assembly.isIncludeBaseDirectory() );
         processModules( archiver, assembly.getModules(), assembly.isIncludeBaseDirectory() );
         processFileSets( archiver, assembly.getFileSets(), assembly.isIncludeBaseDirectory() );
@@ -380,6 +406,54 @@
         archiver.createArchive();
 
         return destFile;
+    }
+
+    private void processRepositories( Archiver archiver, List modulesList, boolean includeBaseDirectory )
+        throws MojoExecutionException, InvalidRepositoryException, RepositoryAssemblyException, ArchiverException
+    {
+        for ( Iterator i = modulesList.iterator(); i.hasNext(); )
+        {
+            Repository repository = (Repository) i.next();
+
+            Set dependencyArtifacts = getDependencies();
+
+            List artifacts = new ArrayList();
+
+            AndArtifactFilter filter = new AndArtifactFilter();
+
+            if ( !repository.getIncludes().isEmpty() )
+            {
+                filter.add( new IncludesArtifactFilter( repository.getIncludes() ) );
+            }
+            if ( !repository.getExcludes().isEmpty() )
+            {
+                filter.add( new ExcludesArtifactFilter( repository.getExcludes() ) );
+            }
+
+            for ( Iterator j = dependencyArtifacts.iterator(); j.hasNext(); )
+            {
+                Artifact artifact = (Artifact) j.next();
+
+                if ( filter.include( artifact ) )
+                {
+                    artifacts.add( artifact );
+                }
+            }
+
+            File repositoryDirectory = new File( tempRoot, repository.getOutputDirectory() );
+
+            repositoryAssembler.assemble( repositoryDirectory, artifacts, project.getRemoteArtifactRepositories() );
+
+            if ( includeBaseDirectory )
+            {
+                archiver.addDirectory( repositoryDirectory, repository.getOutputDirectory() + "/" );
+            }
+            else
+            {
+                archiver.addDirectory( repositoryDirectory );
+            }
+
+        }
     }
 
     private void processModules( Archiver archiver, List modulesList, boolean includeBaseDirectory )

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractDirectoryMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractDirectoryMojo.java?rev=392469&r1=392468&r2=392469&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractDirectoryMojo.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractDirectoryMojo.java Fri Apr  7 18:05:19 2006
@@ -3,7 +3,9 @@
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.assembly.interpolation.AssemblyInterpolationException;
+import org.apache.maven.plugin.assembly.repository.RepositoryAssemblyException;
 import org.apache.maven.plugins.assembly.model.Assembly;
+import org.apache.maven.artifact.InvalidRepositoryException;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
 import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
@@ -73,6 +75,14 @@
         catch ( XmlPullParserException e )
         {
             throw new MojoExecutionException( "Error creating assembly", e );
+        }
+        catch ( RepositoryAssemblyException e )
+        {
+            throw new MojoExecutionException( "Error creating assembly: " + e.getMessage(), e );
+        }
+        catch ( InvalidRepositoryException e )
+        {
+            throw new MojoExecutionException( "Error creating assembly: " + e.getMessage(), e );
         }
     }
 

Added: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java?rev=392469&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java Fri Apr  7 18:05:19 2006
@@ -0,0 +1,98 @@
+package org.apache.maven.plugin.assembly.repository;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author Jason van Zyl
+ */
+public class DefaultRepositoryAssembler
+    extends AbstractLogEnabled
+    implements RepositoryAssembler
+{
+    protected ArtifactFactory artifactFactory;
+
+    protected ArtifactResolver artifactResolver;
+
+    protected ArtifactRepositoryLayout repositoryLayout;
+
+    protected ArtifactRepositoryFactory artifactRepositoryFactory;
+
+    public void assemble( File outputDirectory, List artifacts, List remoteRepositories )
+        throws RepositoryAssemblyException
+    {
+        ArtifactRepository localRepository = createLocalRepository( outputDirectory );
+
+        for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+        {
+            Artifact ma = (Artifact) i.next();
+
+            Artifact a = artifactFactory.createProjectArtifact( ma.getGroupId(), ma.getArtifactId(), ma.getVersion() );
+
+            try
+            {
+                // Not sure if i want to do this transitively
+                artifactResolver.resolveAlways( a, remoteRepositories, localRepository );
+            }
+            catch ( ArtifactResolutionException e )
+            {
+                throw new RepositoryAssemblyException( "Error resolving artifact: " + a, e );
+            }
+            catch ( ArtifactNotFoundException e )
+            {
+                throw new RepositoryAssemblyException( "Cannot find artifact: " + a, e );
+            }
+        }
+    }
+
+    public ArtifactRepository createLocalRepository( File directory )
+    {
+        String localRepositoryUrl = directory.getAbsolutePath();
+
+        if ( !localRepositoryUrl.startsWith( "file:" ) )
+        {
+            localRepositoryUrl = "file://" + localRepositoryUrl;
+        }
+
+        return createRepository( "local", localRepositoryUrl, false, true, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
+    }
+
+    public ArtifactRepository createRepository( String repositoryId,
+                                                String repositoryUrl,
+                                                boolean offline,
+                                                boolean updateSnapshots,
+                                                String globalChecksumPolicy )
+    {
+        ArtifactRepository localRepository =
+            new DefaultArtifactRepository( repositoryId, repositoryUrl, repositoryLayout );
+
+        boolean snapshotPolicySet = false;
+
+        if ( offline )
+        {
+            snapshotPolicySet = true;
+        }
+
+        if ( !snapshotPolicySet && updateSnapshots )
+        {
+            artifactRepositoryFactory.setGlobalUpdatePolicy( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS );
+        }
+
+        artifactRepositoryFactory.setGlobalChecksumPolicy( globalChecksumPolicy );
+
+        return localRepository;
+    }
+}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java?rev=392469&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java Fri Apr  7 18:05:19 2006
@@ -0,0 +1,15 @@
+package org.apache.maven.plugin.assembly.repository;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * @author Jason van Zyl
+ */
+public interface RepositoryAssembler
+{
+    String ROLE = RepositoryAssembler.class.getName();
+
+    public void assemble( File outputDirectory, List artifacts, List remoteRepositories )
+        throws RepositoryAssemblyException;
+}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssemblyException.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssemblyException.java?rev=392469&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssemblyException.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssemblyException.java Fri Apr  7 18:05:19 2006
@@ -0,0 +1,24 @@
+package org.apache.maven.plugin.assembly.repository;
+
+/**
+ * @author Jason van Zyl
+ */
+public class RepositoryAssemblyException
+    extends Exception
+{
+    public RepositoryAssemblyException( String string )
+    {
+        super( string );
+    }
+
+    public RepositoryAssemblyException( String string,
+                                        Throwable throwable )
+    {
+        super( string, throwable );
+    }
+
+    public RepositoryAssemblyException( Throwable throwable )
+    {
+        super( throwable );
+    }
+}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssemblyException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssemblyException.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo?rev=392469&r1=392468&r2=392469&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo Fri Apr  7 18:05:19 2006
@@ -47,7 +47,7 @@
           <required>true</required>
           <type>String</type>
           <description>
-            The id of this assembly.  This is a symbolic name for a 
+            The id of this assembly. This is a symbolic name for a
             particular assembly of files from this project.
           </description>
         </field>
@@ -78,10 +78,10 @@
           <type>boolean</type>
           <defaultValue>true</defaultValue>
           <description>
-            Includes a base directory in the final archive.  For example,
+            Includes a base directory in the final archive. For example,
             if you are creating an assembly named "your-app", setting
             includeBaseDirectory to true will create an archive that
-            includes this base directory.  If this option is set to false
+            includes this base directory. If this option is set to false
             the archive created will unzip its content to the current
             directory.
           </description>
@@ -135,7 +135,17 @@
             Specify assembly behavior for sets of dependencies.
           </description>
         </field>
-
+        <field>
+          <name>repositories</name>
+          <version>1.0.0</version>
+          <association>
+            <type>Repository</type>
+            <multiplicity>*</multiplicity>
+          </association>
+          <description>
+            Specify assembly behavior for sets of repositories.
+          </description>
+        </field>
         <field>
           <name>componentDescriptors</name>
           <version>1.0.0</version>
@@ -163,7 +173,7 @@
           <type>String</type>
           <description>
             Specifies the output directory relative to the root
-            of the root directory of the assembly.  For example,
+            of the root directory of the assembly. For example,
             "log" will put the specified files in the log directory.
           </description>
         </field>
@@ -237,7 +247,7 @@
           <version>1.0.0</version>
           <type>String</type>
           <description>
-            Absolute or relative from the module's directory.  For
+            Absolute or relative from the module's directory. For
             example, "src/main/bin" would select this subdirectory
             of the project in which this dependency is defined.
           </description>
@@ -287,7 +297,7 @@
           <required>false</required>
           <description>
             Specifies the output directory relative to the root
-            of the root directory of the assembly.  For example,
+            of the root directory of the assembly. For example,
             "log" will put the specified files in the log directory.
           </description>
         </field>
@@ -296,7 +306,7 @@
           <version>1.0.0</version>
           <type>String</type>
           <description>
-            Destination file name in outputDirectory. 
+            Destination file name in outputDirectory.
             Default is the same name as the source's file.
           </description>
         </field>
@@ -356,7 +366,7 @@
           <type>String</type>
           <defaultValue>${artifactId}-${version}.${extension}</defaultValue>
           <description>
-            Specify the mapping pattern for all dependencies included 
+            Specify the mapping pattern for all dependencies included
             in this assembly.
             Default is ${artifactId}-${version}.${extension}.
           </description>
@@ -367,7 +377,7 @@
           <defaultValue>false</defaultValue>
           <description>
             If set to true, this property will unpack all dependencies
-            into the specified output directory.  When set to false
+            into the specified output directory. When set to false
             dependencies will be includes as archives (jars).
             Default value is false.
           </description>
@@ -385,7 +395,13 @@
         </field>
       </fields>
     </class>
-    
+
+    <class>
+      <name>Repository</name>
+      <version>1.0.0</version>
+      <superClass>SetBase</superClass>
+      <description>Defines a Maven repository to be included in the assembly.</description>
+    </class>
   </classes>
 </model>