[FIXES MANTTASKS-217]
git-svn-id: https://svn.apache.org/repos/asf/maven/ant-tasks/trunk@1085345 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java b/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java
index b9041b8..2a8bef4 100644
--- a/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java
+++ b/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java
@@ -28,6 +28,7 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -533,7 +534,14 @@
{
Pom pom = new Pom();
- pom.setMavenProject( createMinimalProject( localRepository ) );
+ MavenProject minimalProject = createMinimalProject( localRepository );
+ // we nulled out these fields to allow inheritance when creating poms, but the dummy
+ // needs to be a valid pom, so set them back to something that's OK to resolve
+ minimalProject.setGroupId( "org.apache.maven" );
+ minimalProject.setArtifactId( "super-pom" );
+ minimalProject.setVersion( "2.0" );
+ minimalProject.setPackaging( "pom" );
+ pom.setMavenProject( minimalProject );
return pom;
}
@@ -553,7 +561,13 @@
try
{
- return projectBuilder.buildStandaloneSuperProject( builderConfig );
+ MavenProject mavenProject = projectBuilder.buildStandaloneSuperProject(builderConfig);
+ // if we don't null out these fields then the pom that will be created is at the super-pom's
+ // GAV coordinates and we will not be able to inherit partial GAV coordinates from a parent GAV.
+ mavenProject.setGroupId(null);
+ mavenProject.setArtifactId(null);
+ mavenProject.setVersion(null);
+ return mavenProject;
}
catch ( ProjectBuildingException e )
{
@@ -655,6 +669,25 @@
return pomRefId;
}
+ /**
+ * Try to get all the poms with id's which have been added to the ANT project
+ * @return
+ */
+ public List/*<Pom>*/ getAntReactorPoms()
+ {
+ List result = new ArrayList();
+ Iterator i = getProject().getReferences().values().iterator();
+ while ( i.hasNext() )
+ {
+ Object ref = i.next();
+ if ( ref instanceof Pom )
+ {
+ result.add( (Pom)ref );
+ }
+ }
+ return result;
+ }
+
public void setPomRefId( String pomRefId )
{
this.pomRefId = pomRefId;
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 8abfd76..7f7e862 100644
--- a/src/main/java/org/apache/maven/artifact/ant/Pom.java
+++ b/src/main/java/org/apache/maven/artifact/ant/Pom.java
@@ -44,10 +44,13 @@
import org.apache.maven.project.MavenProjectHelper;
import org.apache.maven.project.ProjectBuilderConfiguration;
import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
+import org.apache.maven.project.injection.ModelDefaultsInjector;
import org.apache.maven.project.interpolation.ModelInterpolationException;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.PropertyHelper;
+import org.codehaus.plexus.util.StringUtils;
import java.io.File;
import java.util.ArrayList;
@@ -222,6 +225,44 @@
{
this.getPomFromAntProject( refid );
}
+ else if ( mavenProject != null )
+ {
+ addAntRepositoriesToProfileManager();
+ ProjectBuilderConfiguration builderConfig = this.createProjectBuilderConfig( localRepository );
+ try
+ {
+ builder.calculateConcreteState( mavenProject, builderConfig, false );
+ }
+ catch ( ModelInterpolationException mie )
+ {
+ throw new BuildException( "Unable to interpolate POM " + file.getName() + ": " + mie.getMessage(), mie );
+ }
+
+ }
+ if ( mavenProject != null && mavenProject.getModel().getParent() != null )
+ {
+ String parentGroupId = mavenProject.getModel().getParent().getGroupId();
+ String parentArtifactId = mavenProject.getModel().getParent().getArtifactId();
+ String parentVersion = mavenProject.getModel().getParent().getVersion();
+ Iterator i = getAntReactorPoms().iterator();
+ while ( i.hasNext() )
+ {
+ Pom pom = (Pom)i.next();
+ if ( StringUtils.equals( parentGroupId, pom.getGroupId() )
+ && StringUtils.equals( parentArtifactId, pom.getArtifactId() )
+ && StringUtils.equals( parentVersion, pom.getVersion() ) )
+ {
+ pom.initialiseMavenProject( builder, localRepository );
+ mavenProject.setParent( pom.getMavenProject() );
+ ModelInheritanceAssembler modelInheritanceAssembler =
+ (ModelInheritanceAssembler) lookup( ModelInheritanceAssembler. ROLE );
+ modelInheritanceAssembler.assembleModelInheritance( mavenProject.getModel(), pom.getModel() );
+ break;
+ }
+ }
+ }
+ ModelDefaultsInjector modelDefaultsInjector = (ModelDefaultsInjector) lookup( ModelDefaultsInjector.ROLE );
+ modelDefaultsInjector.injectDefaults(mavenProject.getModel());
}
protected MavenProject getMavenProject()
@@ -551,6 +592,11 @@
public void addConfiguredDependencyManagement( DependencyManagement dependencyManagement )
{
+ if ( getMavenProject().getDependencyManagement() == null )
+ {
+ // is is a bit disappointing that we have to access the encapsulated model to fix the NPE
+ getMavenProject().getModel().setDependencyManagement(new DependencyManagement());
+ }
getMavenProject().getDependencyManagement().setDependencies( dependencyManagement.getDependencies() );
}