[MANTTASKS-91] adding back code removed by error
git-svn-id: https://svn.apache.org/repos/asf/maven/ant-tasks/branches/maven-ant-tasks-2.0.x@600399 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/artifact/ant/Pom.java b/src/main/java/org/apache/maven/artifact/ant/Pom.java
index 53e6888..86889fd 100644
--- a/src/main/java/org/apache/maven/artifact/ant/Pom.java
+++ b/src/main/java/org/apache/maven/artifact/ant/Pom.java
@@ -20,25 +20,39 @@
*/
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.MavenProjectHelper;
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.ReaderFactory;
import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.Collections;
import java.util.List;
/**
@@ -148,6 +162,8 @@
// TODO: should this be in execute() too? Would that work when it is used as a type?
if ( file != null )
{
+ checkParentPom();
+
try
{
mavenProject = builder.build( file, localRepository, getProfileManager() );
@@ -163,6 +179,56 @@
}
}
+ private void checkParentPom()
+ {
+ Model model = null;
+ try
+ {
+ Reader reader = ReaderFactory.newXmlReader( file );
+ 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 ),
+ createDummyArtifact(), createLocalArtifactRepository(),
+ remoteRepositories, metadataSource, null );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ // MANTTASKS-87: don't fail if parent pom is not resolved immediately
+ log( "Error downloading parent pom " + parent.getId() + ": " + e.getMessage(), Project.MSG_WARN );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ throw new BuildException( "Unable to download parent pom " + parent.getId() + " in remote repository: " + e.getMessage(), e );
+ }
+ }
+ }
+
protected MavenProject getMavenProject()
{
return getInstance().mavenProject;