diff --git a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
index 9c99719df7..613c4929b3 100644
--- a/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
+++ b/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
@@ -518,7 +518,7 @@ public class DefaultMavenProjectBuilder
try
{
- project = processProjectLogic( pomLocation, project, repositories, profileManager );
+ project = processProjectLogic( pomLocation, project, repositories, profileManager, projectDir );
}
catch ( ModelInterpolationException e )
{
@@ -544,7 +544,7 @@ public class DefaultMavenProjectBuilder
* and projects are not cached or reused
*/
private MavenProject processProjectLogic( String pomLocation, MavenProject project, List remoteRepositories,
- ProfileManager profileMgr )
+ ProfileManager profileMgr, File projectDir )
throws ProjectBuildingException, ModelInterpolationException
{
Model model = project.getModel();
@@ -571,17 +571,9 @@ public class DefaultMavenProjectBuilder
// We don't need all the project methods that are added over those in the model, but we do need basedir
Map context = new HashMap( System.getProperties() );
- // FIXME: why is project.file not filled in here? MavenProject.getBasedir() defaults
- // to the current directory which causes all sorts of problems; might be better off
- // setting that to null and just filling in the project file name and removing this.
-
- if ( pomLocation != null && new File( pomLocation ).getParent() != null )
+ if ( projectDir != null )
{
- context.put( "basedir", new File( pomLocation ).getParent() );
- }
- else
- {
- context.put( "basedir", project.getBasedir() );
+ context.put( "basedir", projectDir.getAbsolutePath() );
}
model = modelInterpolator.interpolate( model, context );
@@ -717,7 +709,7 @@ public class DefaultMavenProjectBuilder
model = getCachedModel( parentModel.getGroupId(), parentModel.getArtifactId(), parentModel.getVersion() );
// the only way this will have a value is if we find the parent on disk...
- File parentProjectDir = null;
+ File parentDescriptor = null;
String parentRelativePath = parentModel.getRelativePath();
@@ -725,7 +717,7 @@ public class DefaultMavenProjectBuilder
//
if ( model == null && projectDir != null && StringUtils.isNotEmpty( parentRelativePath ) )
{
- File parentDescriptor = new File( projectDir, parentRelativePath );
+ parentDescriptor = new File( projectDir, parentRelativePath );
try
{
@@ -743,16 +735,16 @@ public class DefaultMavenProjectBuilder
Model candidateParent = readModel( parentDescriptor );
// this works because parent-version is still required...
+ boolean versionMatches = parentModel.getVersion().equals( candidateParent.getVersion() );
+ if ( !versionMatches && candidateParent.getParent() != null )
+ {
+ versionMatches = parentModel.getVersion().equals( candidateParent.getParent().getVersion() );
+ }
if ( parentModel.getGroupId().equals( candidateParent.getGroupId() ) &&
- parentModel.getArtifactId().equals( candidateParent.getArtifactId() ) && (
- parentModel.getVersion().equals( candidateParent.getVersion() ) || (
- candidateParent.getParent() != null &&
- parentModel.getVersion().equals( candidateParent.getParent().getVersion() ) ) ) )
+ parentModel.getArtifactId().equals( candidateParent.getArtifactId() ) && versionMatches )
{
model = candidateParent;
- parentProjectDir = parentDescriptor.getParentFile();
-
getLogger().debug( "Using parent-POM from the project hierarchy at: \'" +
parentModel.getRelativePath() + "\' for project: " + project.getId() );
}
@@ -790,8 +782,14 @@ public class DefaultMavenProjectBuilder
model = findModelFromRepository( parentArtifact, remoteRepositories, localRepository );
}
+ File parentProjectDir = null;
+ if ( parentDescriptor != null )
+ {
+ parentProjectDir = parentDescriptor.getParentFile();
+ }
MavenProject parent = assembleLineage( model, lineage, localRepository, parentProjectDir,
parentSearchRepositories, aggregatedRemoteWagonRepositories );
+ parent.setFile( parentDescriptor );
project.setParent( parent );
@@ -1098,11 +1096,12 @@ public class DefaultMavenProjectBuilder
try
{
- project.setFile( new File( ".", "pom.xml" ) );
+ // TODO: remove - confirm this was a correct decision
+// project.setFile( new File( ".", "pom.xml" ) );
List remoteRepositories = buildArtifactRepositories( superModel );
- project = processProjectLogic( "", project, remoteRepositories, null );
+ project = processProjectLogic( "", project, remoteRepositories, null, null );
return project;
}
diff --git a/maven-project/src/main/java/org/apache/maven/project/MavenProject.java b/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
index 6b85fdd2d3..6b9fb96b99 100644
--- a/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
+++ b/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
@@ -245,7 +245,8 @@ public class MavenProject
}
else
{
- return new File( System.getProperty( "user.dir" ) );
+ // repository based POM
+ return null;
}
}
@@ -342,8 +343,8 @@ public class MavenProject
if ( isAddedToClasspath( a ) )
{
// TODO: let the scope handler deal with this
- if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
- || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
+ if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() ) ||
+ Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
{
String refId = getProjectReferenceId( a.getGroupId(), a.getArtifactId() );
MavenProject project = (MavenProject) projectReferences.get( refId );
@@ -378,8 +379,8 @@ public class MavenProject
if ( isAddedToClasspath( a ) )
{
// TODO: let the scope handler deal with this
- if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
- || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
+ if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() ) ||
+ Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
{
list.add( a );
}
@@ -404,8 +405,8 @@ public class MavenProject
Artifact a = (Artifact) i.next();
// TODO: let the scope handler deal with this
- if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
- || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
+ if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() ) ||
+ Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
{
Dependency dependency = new Dependency();
@@ -1139,7 +1140,7 @@ public class MavenProject
/**
* @return a list of ArtifactRepository objects constructed
- * from the Repository objects returned by getPluginRepositories.
+ * from the Repository objects returned by getPluginRepositories.
*/
public List getPluginArtifactRepositories()
{