You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2007/08/13 22:10:34 UTC

svn commit: r565497 - in /maven/plugins/trunk/maven-assembly-plugin/src: main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java test/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhaseTest.java

Author: jdcasey
Date: Mon Aug 13 13:10:33 2007
New Revision: 565497

URL: http://svn.apache.org/viewvc?view=rev&rev=565497
Log:
Resolve dependencies before calling the repository assembler, to prevent skipping out because project.getDependencyArtifacts() is null.

Modified:
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhaseTest.java

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java?view=diff&rev=565497&r1=565496&r2=565497
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java Mon Aug 13 13:10:33 2007
@@ -1,15 +1,21 @@
 package org.apache.maven.plugin.assembly.archive.phase;
 
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugin.assembly.archive.phase.wrappers.RepoBuilderConfigSourceWrapper;
 import org.apache.maven.plugin.assembly.archive.phase.wrappers.RepoInfoWrapper;
 import org.apache.maven.plugin.assembly.archive.task.AddDirectoryTask;
+import org.apache.maven.plugin.assembly.artifact.DependencyResolver;
 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
 import org.apache.maven.plugin.assembly.model.Assembly;
 import org.apache.maven.plugin.assembly.model.Repository;
 import org.apache.maven.plugin.assembly.utils.AssemblyFormatUtils;
 import org.apache.maven.plugin.assembly.utils.TypeConversionUtils;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.shared.repository.RepositoryAssembler;
 import org.apache.maven.shared.repository.RepositoryAssemblyException;
 import org.apache.maven.shared.repository.RepositoryBuilderConfigSource;
@@ -19,7 +25,9 @@
 
 import java.io.File;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @plexus.component role="org.apache.maven.plugin.assembly.archive.phase.AssemblyArchiverPhase"
@@ -35,15 +43,21 @@
      */
     private RepositoryAssembler repositoryAssembler;
 
+    /**
+     * @plexus.requirement
+     */
+    private DependencyResolver dependencyResolver;
+
     public RepositoryAssemblyPhase()
     {
         // used for plexus.
     }
 
     // introduced for testing.
-    public RepositoryAssemblyPhase( RepositoryAssembler repositoryAssembler )
+    public RepositoryAssemblyPhase( RepositoryAssembler repositoryAssembler, DependencyResolver resolver )
     {
         this.repositoryAssembler = repositoryAssembler;
+        dependencyResolver = resolver;
     }
 
     public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource )
@@ -57,6 +71,8 @@
         {
             Repository repository = (Repository) i.next();
 
+            resolveDependencies(repository, configSource);
+
             File repositoryDirectory = new File( tempRoot, repository.getOutputDirectory() );
 
             if ( !repositoryDirectory.exists() )
@@ -66,7 +82,9 @@
 
             try
             {
+                getLogger().debug( "Assembling repository to: " + repositoryDirectory );
                 repositoryAssembler.buildRemoteRepository( repositoryDirectory, wrap( repository ), wrap( configSource ) );
+                getLogger().debug( "Finished assembling repository to: " + repositoryDirectory );
             }
             catch ( RepositoryAssemblyException e )
             {
@@ -86,6 +104,42 @@
 
             task.execute( archiver, configSource );
         }
+    }
+
+    private void resolveDependencies( Repository repository, AssemblerConfigurationSource configSource )
+        throws ArchiveCreationException
+    {
+        MavenProject project = configSource.getProject();
+
+        ArtifactRepository localRepository = configSource.getLocalRepository();
+
+        List additionalRemoteRepositories = configSource.getRemoteRepositories();
+
+        Set dependencyArtifacts;
+        try
+        {
+            dependencyArtifacts = dependencyResolver
+                .resolveDependencies( project, repository.getScope(), localRepository, additionalRemoteRepositories );
+
+            if ( ( dependencyArtifacts != null ) && !dependencyArtifacts.isEmpty() )
+            {
+                dependencyArtifacts = new LinkedHashSet( dependencyArtifacts );
+            }
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            throw new ArchiveCreationException( "Failed to resolve dependencies for project: " + project.getId(), e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            throw new ArchiveCreationException( "Failed to resolve dependencies for project: " + project.getId(), e );
+        }
+        catch ( InvalidDependencyVersionException e )
+        {
+            throw new ArchiveCreationException( "Failed to resolve dependencies for project: " + project.getId(), e );
+        }
+
+        project.setDependencyArtifacts( dependencyArtifacts );
     }
 
     private RepositoryBuilderConfigSource wrap( AssemblerConfigurationSource configSource )

Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhaseTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhaseTest.java?view=diff&rev=565497&r1=565496&r2=565497
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhaseTest.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhaseTest.java Mon Aug 13 13:10:33 2007
@@ -1,10 +1,14 @@
 package org.apache.maven.plugin.assembly.archive.phase;
 
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.model.Model;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugin.assembly.archive.phase.wrappers.RepoBuilderConfigSourceWrapper;
 import org.apache.maven.plugin.assembly.archive.phase.wrappers.RepoInfoWrapper;
+import org.apache.maven.plugin.assembly.artifact.DependencyResolver;
 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
 import org.apache.maven.plugin.assembly.model.Assembly;
 import org.apache.maven.plugin.assembly.model.Repository;
@@ -12,6 +16,7 @@
 import org.apache.maven.plugin.assembly.testutils.TestFileManager;
 import org.apache.maven.plugin.assembly.utils.TypeConversionUtils;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.shared.repository.RepositoryAssembler;
 import org.apache.maven.shared.repository.RepositoryAssemblyException;
 import org.codehaus.plexus.archiver.Archiver;
@@ -23,6 +28,9 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
 
 import junit.framework.Assert;
 import junit.framework.TestCase;
@@ -45,7 +53,7 @@
         MockManager mm = new MockManager();
 
         MockAndControlForRepositoryAssembler macRepo = new MockAndControlForRepositoryAssembler( mm );
-        MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
+        MockAndControlForDependencyResolver macResolver = new MockAndControlForDependencyResolver( mm );
         MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
         MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
 
@@ -59,8 +67,9 @@
 
         mm.replayAll();
 
-        createPhase( macRepo.repositoryAssembler, macLogger.logger ).execute( assembly, macArchiver.archiver,
-                                                                              macCS.configSource );
+        createPhase( macRepo.repositoryAssembler, macResolver.dependencyResolver,
+                     new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ).execute( assembly, macArchiver.archiver,
+                                                                                macCS.configSource );
 
         mm.verifyAll();
     }
@@ -71,7 +80,7 @@
         MockManager mm = new MockManager();
 
         MockAndControlForRepositoryAssembler macRepo = new MockAndControlForRepositoryAssembler( mm );
-        MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
+        MockAndControlForDependencyResolver macResolver = new MockAndControlForDependencyResolver( mm );
         MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
         MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
 
@@ -80,39 +89,45 @@
         macCS.expectGetTemporaryRootDirectory( tempRoot );
         macCS.expectGetProject( new MavenProject( new Model() ) );
         macCS.expectGetFinalName( "final-name" );
+        macCS.expectGetLocalRepository();
+        macCS.expectGetRemoteRepositories( Collections.EMPTY_LIST );
+
+        macResolver.expectResolveDependencies( Collections.EMPTY_SET );
 
         Assembly assembly = new Assembly();
 
         assembly.setId( "test" );
-        
+
         Repository repo = new Repository();
-        
+
         repo.setOutputDirectory( "out" );
         repo.setDirectoryMode( "777" );
         repo.setFileMode( "777" );
-        
+
         int mode = TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
-        
+
         File outDir = new File( tempRoot, "out" );
-        
+
         macArchiver.expectModeChange( -1, -1, mode, mode, true );
         macArchiver.expectAddDirectory( outDir, "out/", null, FileUtils.getDefaultExcludes() );
-        
+
         macRepo.expectAssemble( outDir, repo, macCS.configSource );
-        
+
         assembly.addRepository( repo );
 
         mm.replayAll();
 
-        createPhase( macRepo.repositoryAssembler, macLogger.logger ).execute( assembly, macArchiver.archiver,
-                                                                              macCS.configSource );
+        createPhase( macRepo.repositoryAssembler, macResolver.dependencyResolver,
+                     new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ).execute( assembly, macArchiver.archiver,
+                                                                                macCS.configSource );
 
         mm.verifyAll();
     }
 
-    private RepositoryAssemblyPhase createPhase( RepositoryAssembler repositoryAssembler, Logger logger )
+    private RepositoryAssemblyPhase createPhase( RepositoryAssembler repositoryAssembler, DependencyResolver resolver,
+                                                 Logger logger )
     {
-        RepositoryAssemblyPhase phase = new RepositoryAssemblyPhase( repositoryAssembler );
+        RepositoryAssemblyPhase phase = new RepositoryAssemblyPhase( repositoryAssembler, resolver );
         phase.enableLogging( logger );
 
         return phase;
@@ -129,9 +144,9 @@
             control = MockControl.createControl( Archiver.class );
             mockManager.add( control );
 
-            archiver = ( Archiver ) control.getMock();
+            archiver = (Archiver) control.getMock();
         }
-        
+
         public void expectAddDirectory( File outDir, String location, String[] includes, String[] excludes )
         {
             try
@@ -142,13 +157,12 @@
             {
                 Assert.fail( "Should never happen." );
             }
-            
+
             control.setMatcher( MockControl.ARRAY_MATCHER );
             control.setVoidCallable( MockControl.ONE_OR_MORE );
         }
 
-        void expectModeChange( int defaultDirMode, int defaultFileMode, int dirMode, int fileMode,
-                                                boolean expectTwoSets )
+        void expectModeChange( int defaultDirMode, int defaultFileMode, int dirMode, int fileMode, boolean expectTwoSets )
         {
             archiver.getDefaultDirectoryMode();
             control.setReturnValue( defaultDirMode );
@@ -166,7 +180,6 @@
             archiver.setDefaultFileMode( defaultFileMode );
         }
 
-
         // public void expectAddFile( File file, String outputLocation, int fileMode )
         // {
         // try
@@ -186,12 +199,37 @@
 
         MockControl control;
 
+        ArtifactRepository localRepo;
+
+        MockControl localRepoCtl;
+
+        final MockManager mockManager;
+
         public MockAndControlForConfigSource( MockManager mockManager )
         {
+            this.mockManager = mockManager;
+
             control = MockControl.createControl( AssemblerConfigurationSource.class );
             mockManager.add( control );
 
-            configSource = ( AssemblerConfigurationSource ) control.getMock();
+            configSource = (AssemblerConfigurationSource) control.getMock();
+        }
+
+        public void expectGetRemoteRepositories( List remoteRepos )
+        {
+            configSource.getRemoteRepositories();
+            control.setReturnValue( remoteRepos, MockControl.ONE_OR_MORE );
+        }
+
+        public void expectGetLocalRepository()
+        {
+            localRepoCtl = MockControl.createControl( ArtifactRepository.class );
+            mockManager.add( localRepoCtl );
+
+            localRepo = (ArtifactRepository) localRepoCtl.getMock();
+
+            configSource.getLocalRepository();
+            control.setReturnValue( localRepo, MockControl.ONE_OR_MORE );
         }
 
         public void expectGetProject( MavenProject project )
@@ -199,7 +237,7 @@
             configSource.getProject();
             control.setReturnValue( project, MockControl.ONE_OR_MORE );
         }
-        
+
         public void expectGetFinalName( String finalName )
         {
             configSource.getFinalName();
@@ -220,6 +258,44 @@
         // }
     }
 
+    private final class MockAndControlForDependencyResolver
+    {
+
+        MockControl dependencyResolverCtl;
+
+        DependencyResolver dependencyResolver;
+
+        public MockAndControlForDependencyResolver( MockManager mm )
+        {
+            dependencyResolverCtl = MockControl.createControl( DependencyResolver.class );
+            mm.add( dependencyResolverCtl );
+
+            dependencyResolver = (DependencyResolver) dependencyResolverCtl.getMock();
+        }
+
+        public void expectResolveDependencies( Set resolvedArtifacts )
+        {
+            try
+            {
+                dependencyResolver.resolveDependencies( null, null, null, null );
+                dependencyResolverCtl.setMatcher( MockControl.ALWAYS_MATCHER );
+                dependencyResolverCtl.setReturnValue( resolvedArtifacts );
+            }
+            catch ( ArtifactResolutionException e )
+            {
+                Assert.fail( "Should never happen!" );
+            }
+            catch ( ArtifactNotFoundException e )
+            {
+                Assert.fail( "Should never happen!" );
+            }
+            catch ( InvalidDependencyVersionException e )
+            {
+                Assert.fail( "Should never happen!" );
+            }
+        }
+    }
+
     private final class MockAndControlForRepositoryAssembler
     {
         RepositoryAssembler repositoryAssembler;
@@ -231,21 +307,22 @@
             control = MockControl.createControl( RepositoryAssembler.class );
             mockManager.add( control );
 
-            repositoryAssembler = ( RepositoryAssembler ) control.getMock();
+            repositoryAssembler = (RepositoryAssembler) control.getMock();
         }
 
         public void expectAssemble( File dir, Repository repo, AssemblerConfigurationSource configSource )
         {
             try
             {
-                repositoryAssembler.buildRemoteRepository( dir, new RepoInfoWrapper( repo ), new RepoBuilderConfigSourceWrapper( configSource ) );
+                repositoryAssembler.buildRemoteRepository( dir, new RepoInfoWrapper( repo ),
+                                                           new RepoBuilderConfigSourceWrapper( configSource ) );
                 control.setMatcher( MockControl.ALWAYS_MATCHER );
             }
             catch ( RepositoryAssemblyException e )
             {
                 Assert.fail( "Should never happen" );
             }
-            
+
             control.setVoidCallable( MockControl.ONE_OR_MORE );
         }
     }
@@ -261,7 +338,7 @@
             control = MockControl.createControl( Logger.class );
             mockManager.add( control );
 
-            logger = ( Logger ) control.getMock();
+            logger = (Logger) control.getMock();
         }
     }