Author: jvanzyl
Date: Wed Jun 27 22:25:33 2007
New Revision: 551448

URL: http://svn.apache.org/viewvc?view=rev&rev=551448
Log:
MANTTASKS-73 Fixing missing RemoteRepository sub-element for tasks pom and 
install-provider
MANTTASKS-75 NPE if loaded settings.xml does not contain <localRepository>
MANTTASKS-76 Patches to make this work for 2.0.7
Submitted by: Herve Boutemy

Modified:
    maven/ant-tasks/trunk/pom.xml
    maven/ant-tasks/trunk/sample.build.xml
    
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java
    
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
    
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/InstallWagonProviderTask.java
    maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/Pom.java

Modified: maven/ant-tasks/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/ant-tasks/trunk/pom.xml?view=diff&rev=551448&r1=551447&r2=551448
==============================================================================
--- maven/ant-tasks/trunk/pom.xml (original)
+++ maven/ant-tasks/trunk/pom.xml Wed Jun 27 22:25:33 2007
@@ -82,7 +82,7 @@
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-project</artifactId>
-      <version>2.0.6</version>
+      <version>2.0.7</version>
       <exclusions>
         <exclusion>
           <artifactId>junit</artifactId>
@@ -93,12 +93,12 @@
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-error-diagnostics</artifactId>
-      <version>2.0.6</version>
+      <version>2.0.7</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-settings</artifactId>
-      <version>2.0.6</version>
+      <version>2.0.7</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.wagon</groupId>
@@ -120,7 +120,7 @@
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-artifact-manager</artifactId>
-      <version>2.0.6</version>
+      <version>2.0.7</version>
       <exclusions>
         <exclusion>
           <artifactId>junit</artifactId>
@@ -136,7 +136,7 @@
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-artifact</artifactId>
-      <version>2.0.6</version>
+      <version>2.0.7</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.wagon</groupId>

Modified: maven/ant-tasks/trunk/sample.build.xml
URL: 
http://svn.apache.org/viewvc/maven/ant-tasks/trunk/sample.build.xml?view=diff&rev=551448&r1=551447&r2=551448
==============================================================================
--- maven/ant-tasks/trunk/sample.build.xml (original)
+++ maven/ant-tasks/trunk/sample.build.xml Wed Jun 27 22:25:33 2007
@@ -39,7 +39,7 @@
   </target>
   
   <target name="test-all-deps" description="All dependencies tests"
-    depends="test-pom,test-no-deps,test-pom-deps,test-deps,test-legacy-pom">
+    
depends="test-pom,test-pom-with-parent,test-no-deps,test-pom-deps,test-deps,test-legacy-pom">
     <echo>test-bad-dep and test-invalid-pom-ref must be run manually, since 
they are intended to fail</echo>
   </target>
 
@@ -47,7 +47,7 @@
     
depends="test-deploy-spaces,test-deploy,test-no-dist-mgmt,test-install-attached,test-deploy-attached"/>
 
   <target name="test-all" description="All tests"
-    depends="test-all-deps,test-all-pubs">
+    depends="test-all-deps,test-all-pubs,test-install-provider">
     <echo>test-scm not run, since it fails...</echo>
   </target>
 
@@ -59,6 +59,11 @@
     </copy>
   </target>
 
+  <target name="test-empty-settings" depends="initTaskDefs">
+    <artifact:dependencies filesetId="runtime.fileset" 
settingsFile="${basedir}/src/test/settings-empty.xml">
+    </artifact:dependencies>
+  </target>
+
   <target name="test-bad-dep" depends="initTaskDefs">
     <artifact:dependencies pathId="dependency.classpath" 
filesetId="dependency.fileset">
       <dependency groupId="foo" artifactId="foo" version="1.0-alpha-2"/>
@@ -266,5 +271,22 @@
       <attach file="${basedir}/target/sample-build-test.pom.asc" 
type="pom.asc"/>
     </artifact:install>
   </target>
-</project>
 
+  <target name="test-install-provider" depends="initTaskDefs">
+    <artifact:install-provider groupId="it.ant-tasks" artifactId="wagon-foo" 
version="1.0-beta-2">
+      <localRepository refid="local.repository"/>
+      <remoteRepository url="file://${user.dir}/src/test/repo"/>
+    </artifact:install-provider>
+  </target>
+
+  <target name="test-pom-with-parent" depends="initTaskDefs">
+    <artifact:pom file="${user.dir}/src/test/pom-with-parent.xml" 
id="my.maven.project">
+      <localRepository refid="local.repository"/>
+      <remoteRepository url="file://${user.dir}/src/test/repo"/>
+    </artifact:pom>
+
+    <echo>Artifact ID = ${my.maven.project.artifactId}</echo>
+
+    <echo>Parent Artifact ID = ${my.maven.project.parent.artifactId}</echo>
+  </target>
+</project>

Modified: 
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java
URL: 
http://svn.apache.org/viewvc/maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java?view=diff&rev=551448&r1=551447&r2=551448
==============================================================================
--- 
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java
 (original)
+++ 
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java
 Wed Jun 27 22:25:33 2007
@@ -91,6 +91,11 @@
         return new DefaultArtifactRepository( "local", "file://" + 
localRepository.getPath(), repositoryLayout );
     }
 
+    /**
+     * Create a core-Maven ArtifactRepository from a Maven Ant Tasks's 
RemoteRepository definition.
+     * @param repository the remote repository as defined in Ant
+     * @return the corresponding ArtifactRepository
+     */
     protected ArtifactRepository createRemoteArtifactRepository( 
RemoteRepository repository )
     {
         ArtifactRepositoryLayout repositoryLayout =
@@ -177,8 +182,6 @@
     {
         if ( settings == null )
         {
-            settings = new Settings();
-
             File settingsFile = new File( System.getProperty( "user.home" ), 
".ant/settings.xml" );
             if ( !settingsFile.exists() )
             {
@@ -205,19 +208,19 @@
 
             if ( settingsFile.exists() )
             {
-                loadSettings(settingsFile);
+                loadSettings( settingsFile );
             }
-
-            if ( StringUtils.isEmpty( settings.getLocalRepository() ) )
+            else
             {
-                String location = new File( System.getProperty( "user.home" ), 
".m2/repository" ).getAbsolutePath();
-                settings.setLocalRepository( location );
+                settings = new Settings();
+                checkSettingsLocalRepository();
             }
         }
         return settings;
     }
 
-    private void loadSettings(File settingsFile) {
+    private void loadSettings( File settingsFile )
+    {
         FileReader reader = null;
         try
         {
@@ -227,6 +230,8 @@
             SettingsXpp3Reader modelReader = new SettingsXpp3Reader();
 
             settings = modelReader.read( reader );
+
+            checkSettingsLocalRepository();
         }
         catch ( IOException e )
         {
@@ -244,10 +249,20 @@
         }
     }
     
-    public void setSettingsFile(File settingsFile) {
-        if (!settingsFile.exists()) throw new BuildException("settingsFile 
does not exist: " + settingsFile.getAbsolutePath());
-        settings = new Settings();
-        loadSettings(settingsFile);
+    private void checkSettingsLocalRepository()
+    {
+        if ( StringUtils.isEmpty( settings.getLocalRepository() ) )
+        {
+            String location = new File( System.getProperty( "user.home" ), 
".m2/repository" ).getAbsolutePath();
+            settings.setLocalRepository( location );
+        }
+    }
+
+    public void setSettingsFile( File settingsFile )
+    {
+        if ( !settingsFile.exists() )
+            throw new BuildException( "settingsFile does not exist: " + 
settingsFile.getAbsolutePath() );
+        loadSettings( settingsFile );
     }
 
     protected RemoteRepository createAntRemoteRepository( 
org.apache.maven.model.Repository pomRepository )
@@ -320,18 +335,6 @@
         {
             throw new BuildException( "Unable to find component: " + role + 
"[" + roleHint + "]", e );
         }
-    }
-
-    protected static RemoteRepository getDefaultRemoteRepository()
-    {
-        // TODO: could we utilise the super POM for this?
-        RemoteRepository remoteRepository = new RemoteRepository();
-        remoteRepository.setId( "central" );
-        remoteRepository.setUrl( "http://repo1.maven.org/maven2"; );
-        RepositoryPolicy snapshots = new RepositoryPolicy();
-        snapshots.setEnabled( false );
-        remoteRepository.addSnapshots( snapshots );
-        return remoteRepository;
     }
 
     protected synchronized PlexusContainer getContainer()

Modified: 
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
URL: 
http://svn.apache.org/viewvc/maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java?view=diff&rev=551448&r1=551447&r2=551448
==============================================================================
--- 
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
 (original)
+++ 
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/DependenciesTask.java
 Wed Jun 27 22:25:33 2007
@@ -63,12 +63,10 @@
  * @version $Id$
  */
 public class DependenciesTask
-    extends AbstractArtifactTask
+    extends AbstractArtifactWithRepositoryTask
 {
     private List dependencies = new ArrayList();
 
-    private List remoteRepositories = new ArrayList();
-
     private String pathId;
 
     private String filesetId;
@@ -134,12 +132,7 @@
         ArtifactResolutionResult result;
         Set artifacts;
 
-        if ( getRemoteRepositories().isEmpty() )
-        {
-            addRemoteRepository( getDefaultRemoteRepository() );
-        }
-
-        List remoteArtifactRepositories = createRemoteArtifactRepositories( 
getRemoteRepositories() );
+        List remoteArtifactRepositories = createRemoteArtifactRepositories();
 
         try
         {
@@ -196,7 +189,6 @@
         {
             throw new BuildException( "Reference ID " + pathId + " already 
exists" );
         }
-        */
 
         if ( filesetId != null && getProject().getReference( filesetId ) != 
null )
         {
@@ -207,6 +199,7 @@
         {
             throw new BuildException( "Reference ID " + sourcesFilesetId + " 
already exists" );
         }
+        */
 
         FileList fileList = new FileList();
         fileList.setDir( getLocalRepository().getPath() );
@@ -300,49 +293,6 @@
             String versionsValue = StringUtils.join( versions.iterator(), 
File.pathSeparator );
             getProject().setNewProperty( versionsId, versionsValue );
         }
-    }
-
-    private static String statusAsString( RepositoryPolicy policy )
-    {
-        return (policy == null) || policy.isEnabled() ? "enabled" : "disabled";
-    }
-
-    private List createRemoteArtifactRepositories( List remoteRepositories )
-    {
-        log( "Using remote repositories:", Project.MSG_VERBOSE );
-        List list = new ArrayList();
-        for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); )
-        {
-            RemoteRepository remoteRepository = (RemoteRepository) i.next();
-
-            StringBuffer msg = new StringBuffer();
-            msg.append( "  - id=" + remoteRepository.getId() );
-            msg.append( ", url=" + remoteRepository.getUrl() );
-            msg.append( ", releases=" + statusAsString( 
remoteRepository.getReleases() ) );
-            msg.append( ", snapshots=" + statusAsString( 
remoteRepository.getSnapshots() ) );
-            if ( remoteRepository.getAuthentication() != null )
-            {
-                msg.append( ", authentication=" + 
remoteRepository.getAuthentication().getUserName() );
-            }
-            if ( remoteRepository.getProxy() != null )
-            {
-                msg.append( ", proxy=" + remoteRepository.getProxy().getHost() 
);
-            }
-            getProject().log( msg.toString(), Project.MSG_VERBOSE );
-
-            list.add( createRemoteArtifactRepository( remoteRepository ) );
-        }
-        return list;
-    }
-
-    public List getRemoteRepositories()
-    {
-        return remoteRepositories;
-    }
-
-    public void addRemoteRepository( RemoteRepository remoteRepository )
-    {
-        remoteRepositories.add( remoteRepository );
     }
 
     public List getDependencies()

Modified: 
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/InstallWagonProviderTask.java
URL: 
http://svn.apache.org/viewvc/maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/InstallWagonProviderTask.java?view=diff&rev=551448&r1=551447&r2=551448
==============================================================================
--- 
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/InstallWagonProviderTask.java
 (original)
+++ 
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/InstallWagonProviderTask.java
 Wed Jun 27 22:25:33 2007
@@ -23,7 +23,6 @@
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
-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.artifact.resolver.ArtifactResolutionResult;
@@ -34,6 +33,7 @@
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.codehaus.plexus.PlexusContainerException;
+
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -45,9 +45,9 @@
  * @version $Id$
  */
 public class InstallWagonProviderTask
-    extends AbstractArtifactTask
+    extends AbstractArtifactWithRepositoryTask
 {
-       private String groupId =  "org.apache.maven.wagon";
+       private String groupId = "org.apache.maven.wagon";
        
     private String artifactId;
 
@@ -86,12 +86,6 @@
     public void doExecute()
         throws BuildException
     {
-        MavenMetadataSource metadataSource = (MavenMetadataSource) lookup( 
ArtifactMetadataSource.ROLE );
-
-        ArtifactResolver resolver = (ArtifactResolver) lookup( 
ArtifactResolver.ROLE );
-        ArtifactRepository artifactRepository = 
createRemoteArtifactRepository( getDefaultRemoteRepository() );
-        List remoteRepositories = Collections.singletonList( 
artifactRepository );
-
         VersionRange versionRange;
         try
         {
@@ -110,6 +104,10 @@
         ArtifactResolutionResult result;
         try
         {
+            MavenMetadataSource metadataSource = (MavenMetadataSource) lookup( 
ArtifactMetadataSource.ROLE );
+            ArtifactResolver resolver = (ArtifactResolver) lookup( 
ArtifactResolver.ROLE );
+            List remoteRepositories = createRemoteArtifactRepositories();
+
             result = resolver.resolveTransitively( Collections.singleton( 
providerArtifact ),
                                                    createArtifact( 
createDummyPom() ), createLocalArtifactRepository(),
                                                    remoteRepositories, 
metadataSource, null );

Modified: 
maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/Pom.java
URL: 
http://svn.apache.org/viewvc/maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/Pom.java?view=diff&rev=551448&r1=551447&r2=551448
==============================================================================
--- maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/Pom.java 
(original)
+++ maven/ant-tasks/trunk/src/main/java/org/apache/maven/artifact/ant/Pom.java 
Wed Jun 27 22:25:33 2007
@@ -19,24 +19,42 @@
  * under the License.
  */
 
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 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.artifact.resolver.ArtifactResolver;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.CiManagement;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.IssueManagement;
+import org.apache.maven.model.Model;
 import org.apache.maven.model.Organization;
+import org.apache.maven.model.Parent;
 import org.apache.maven.model.Reporting;
 import org.apache.maven.model.Scm;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.artifact.MavenMetadataSource;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.PropertyHelper;
 import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Collections;
+import java.util.List;
 
 /**
  * A POM typedef.
@@ -53,7 +71,7 @@
  * @version $Id$
  */
 public class Pom
-    extends AbstractArtifactTask
+    extends AbstractArtifactWithRepositoryTask
 {
     private String refid;
 
@@ -123,6 +141,8 @@
         // TODO: should this be in execute() too? Would that work when it is 
used as a type?
         if ( file != null )
         {
+            checkParentPom();
+            
             try
             {
                 // TODO: should the profiles be constructed and passed in 
here? From Ant, or perhaps settings?
@@ -130,12 +150,62 @@
             }
             catch ( ProjectBuildingException e )
             {
-                throw new BuildException( "Unable to build project: " + file, 
e );
+                throw new BuildException( "Unable to initialize POM " + 
file.getName() + ": " + e.getMessage(), e );
             }
         }
         else if ( refid != null )
         {
             getInstance().initialise( builder, localRepository );
+        }
+    }
+    
+    private void checkParentPom()
+    {
+        Model model = null;
+        try
+        {
+            InputStream in = new FileInputStream( file );
+            Reader reader = new InputStreamReader( in, "UTF-8" );
+            model = new MavenXpp3Reader().read( reader );
+        }
+        catch ( IOException e )
+        {
+            throw new BuildException( "IO error while reading pom: " + 
e.getMessage(), e );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new BuildException( "Error parsing pom: " + e.getMessage(), 
e );
+        }
+
+        if ( model.getParent() != null && model.getParent().getRelativePath() 
!= null )
+        {
+            // resolve parent pom
+            Parent parent = model.getParent();
+            String groupId = parent.getGroupId();
+            String artifactId = parent.getArtifactId();
+            String version = parent.getVersion();
+
+            ArtifactFactory factory = (ArtifactFactory) lookup( 
ArtifactFactory.ROLE );
+            Artifact parentArtifact = factory.createParentArtifact( groupId, 
artifactId, version );
+
+            try
+            {
+                MavenMetadataSource metadataSource = (MavenMetadataSource) 
lookup( ArtifactMetadataSource.ROLE );
+                ArtifactResolver resolver = (ArtifactResolver) lookup( 
ArtifactResolver.ROLE );
+                List remoteRepositories = createRemoteArtifactRepositories();
+
+                resolver.resolveTransitively( Collections.singleton( 
parentArtifact ),
+                                              createArtifact( createDummyPom() 
), createLocalArtifactRepository(),
+                                              remoteRepositories, 
metadataSource, null );
+            }
+            catch ( ArtifactResolutionException e )
+            {
+                throw new BuildException( "Error downloading parent pom: " + 
e.getMessage(), e );
+            }
+            catch ( ArtifactNotFoundException e )
+            {
+                throw new BuildException( "Unable to download parent pom in 
remote repository: " + e.getMessage(), e );
+            }
         }
     }
 


Reply via email to