diff --git a/maven-core-it/README.txt b/maven-core-it/README.txt
index 78c1ff9ede..53679a25bf 100644
--- a/maven-core-it/README.txt
+++ b/maven-core-it/README.txt
@@ -277,6 +277,14 @@ it0101: Test that properties defined in an active profile in the user's
it0102: Test that calculations for profile activation only
use profiles defined in the POM. [MNG-2136]
+it0103: Verify that multimodule builds where one project references another as
+ a parent can build, even if that parent is not correctly referenced by
+ and is not in the local repository. [MNG-2196]
+
+it0104: Verify that plugin configurations are resolved correctly, particularly
+ when they contain ${project.build.directory} in the string value of a
+ Map.Entry.
+
-------------------------------------------------------------------------------
- generated sources
diff --git a/maven-core-it/integration-tests.txt b/maven-core-it/integration-tests.txt
index 9a110d7dc0..0e0e7daad1 100644
--- a/maven-core-it/integration-tests.txt
+++ b/maven-core-it/integration-tests.txt
@@ -1,3 +1,5 @@
+#it0104 Commenting out, not fixed until post-2.0.4, due to dependency on new plexus-container-default version.
+it0103
it0102
it0101
it0100
diff --git a/maven-core-it/it0098/cli-options.txt b/maven-core-it/it0098/cli-options.txt
index fcc742f004..8e6445072a 100644
--- a/maven-core-it/it0098/cli-options.txt
+++ b/maven-core-it/it0098/cli-options.txt
@@ -1 +1 @@
--DgroupId=org.someproject "-DartifactId=test project"
+-Dtest.property="Test Property"
diff --git a/maven-core-it/it0098/expected-results.txt b/maven-core-it/it0098/expected-results.txt
deleted file mode 100644
index 8d690b7b63..0000000000
--- a/maven-core-it/it0098/expected-results.txt
+++ /dev/null
@@ -1 +0,0 @@
-test project/pom.xml
diff --git a/maven-core-it/it0098/goals.txt b/maven-core-it/it0098/goals.txt
index a5feaf7a9a..9daeafb986 100644
--- a/maven-core-it/it0098/goals.txt
+++ b/maven-core-it/it0098/goals.txt
@@ -1 +1 @@
-archetype:create
+test
diff --git a/maven-core-it/it0098/pom.xml b/maven-core-it/it0098/pom.xml
index 9b5f9d8d7a..6a38d9a098 100644
--- a/maven-core-it/it0098/pom.xml
+++ b/maven-core-it/it0098/pom.xml
@@ -1,6 +1,13 @@
4.0.0
org.apache.maven.it0098
- it0098-archetype-orchestration-test
+ it0098
1
+
+
+ junit
+ junit
+ 3.8.1
+
+
diff --git a/maven-core-it/it0098/src/test/java/org/apache/maven/it/it0098/QuotedCLIPropertyTest.java b/maven-core-it/it0098/src/test/java/org/apache/maven/it/it0098/QuotedCLIPropertyTest.java
new file mode 100644
index 0000000000..60ad8899ed
--- /dev/null
+++ b/maven-core-it/it0098/src/test/java/org/apache/maven/it/it0098/QuotedCLIPropertyTest.java
@@ -0,0 +1,14 @@
+package org.apache.maven.it.it0098;
+
+import junit.framework.TestCase;
+
+public class QuotedCLIPropertyTest
+ extends TestCase
+{
+
+ public void testPropertyValue()
+ {
+ assertEquals( "Test Property", System.getProperty( "test.property" ) );
+ }
+
+}
diff --git a/maven-core-it/it0098/verifier.properties b/maven-core-it/it0098/verifier.properties
deleted file mode 100644
index 68cb43fc45..0000000000
--- a/maven-core-it/it0098/verifier.properties
+++ /dev/null
@@ -1 +0,0 @@
-failOnErrorOutput=false
diff --git a/maven-core-it/it0103/goals.txt b/maven-core-it/it0103/goals.txt
new file mode 100644
index 0000000000..ba3bd78738
--- /dev/null
+++ b/maven-core-it/it0103/goals.txt
@@ -0,0 +1 @@
+package
diff --git a/maven-core-it/it0103/level1/level2/level3/pom.xml b/maven-core-it/it0103/level1/level2/level3/pom.xml
new file mode 100644
index 0000000000..12d7490fbd
--- /dev/null
+++ b/maven-core-it/it0103/level1/level2/level3/pom.xml
@@ -0,0 +1,12 @@
+
+ 4.0.0
+
+ org.apache.maven.it0103
+ level1
+ 1
+
+ org.apache.maven.it0103
+ level3
+ 1
+
+
diff --git a/maven-core-it/it0103/level1/level2/pom.xml b/maven-core-it/it0103/level1/level2/pom.xml
new file mode 100644
index 0000000000..36c55114e1
--- /dev/null
+++ b/maven-core-it/it0103/level1/level2/pom.xml
@@ -0,0 +1,14 @@
+
+ 4.0.0
+
+ org.apache.maven.it0103
+ level1
+ 1
+
+ level2
+ pom
+
+
+ level3
+
+
diff --git a/maven-core-it/it0103/level1/pom.xml b/maven-core-it/it0103/level1/pom.xml
new file mode 100644
index 0000000000..437160cab9
--- /dev/null
+++ b/maven-core-it/it0103/level1/pom.xml
@@ -0,0 +1,14 @@
+
+ 4.0.0
+
+ org.apache.maven.it0103
+ root
+ 1
+
+ level1
+ pom
+
+
+ level2
+
+
diff --git a/maven-core-it/it0103/pom.xml b/maven-core-it/it0103/pom.xml
new file mode 100644
index 0000000000..4737448197
--- /dev/null
+++ b/maven-core-it/it0103/pom.xml
@@ -0,0 +1,11 @@
+
+ 4.0.0
+ org.apache.maven.it0103
+ root
+ 1
+ pom
+
+
+ level1
+
+
diff --git a/maven-core-it/it0104/goals.txt b/maven-core-it/it0104/goals.txt
new file mode 100644
index 0000000000..30d74d2584
--- /dev/null
+++ b/maven-core-it/it0104/goals.txt
@@ -0,0 +1 @@
+test
\ No newline at end of file
diff --git a/maven-core-it/it0104/pom.xml b/maven-core-it/it0104/pom.xml
new file mode 100644
index 0000000000..69799706bc
--- /dev/null
+++ b/maven-core-it/it0104/pom.xml
@@ -0,0 +1,36 @@
+
+ 4.0.0
+ org.apache.maven.it
+ it0104
+ jar
+ 1.0-SNAPSHOT
+ Maven Quick Start Archetype
+ http://maven.apache.org
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
+
+
+
+
+ maven-surefire-plugin
+
+
+
+ target.dir
+ ${project.build.directory}
+
+
+
+
+
+
+
+
diff --git a/maven-core-it/it0104/src/main/java/org/apache/maven/it/App.java b/maven-core-it/it0104/src/main/java/org/apache/maven/it/App.java
new file mode 100644
index 0000000000..2659fcfc52
--- /dev/null
+++ b/maven-core-it/it0104/src/main/java/org/apache/maven/it/App.java
@@ -0,0 +1,13 @@
+package org.apache.maven.it;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/maven-core-it/it0104/src/test/java/org/apache/maven/it/AppTest.java b/maven-core-it/it0104/src/test/java/org/apache/maven/it/AppTest.java
new file mode 100644
index 0000000000..572ec8e470
--- /dev/null
+++ b/maven-core-it/it0104/src/test/java/org/apache/maven/it/AppTest.java
@@ -0,0 +1,29 @@
+package org.apache.maven.it;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.File;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+
+ String targetDir = System.getProperty( "target.dir" );
+
+ System.out.println( "Got 'target.dir' of: '" + targetDir + "'" );
+
+ assertNotNull( "System property 'target.dir' is not present.", targetDir );
+ assertTrue( "System property 'target.dir' was not resolved correctly.", targetDir.indexOf( "${" ) < 0 );
+ }
+}
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 a139158084..a0695ad24b 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
@@ -151,8 +151,10 @@ public class DefaultMavenProjectBuilder
private ProfileInjector profileInjector;
private ModelValidator validator;
+
+ private Map rawProjectCache = new HashMap();
- private Map projectCache = new HashMap();
+ private Map processedProjectCache = new HashMap();
// TODO: make it a component
private MavenXpp3Reader modelReader;
@@ -213,7 +215,7 @@ public MavenProject buildFromRepository( Artifact artifact,
{
String cacheKey = createCacheKey( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
- MavenProject project = (MavenProject) projectCache.get( cacheKey );
+ MavenProject project = (MavenProject) processedProjectCache.get( cacheKey );
if ( project != null )
{
@@ -684,6 +686,8 @@ private MavenProject buildInternal( String pomLocation,
}
project.setOriginalModel( originalModel );
+
+ rawProjectCache.put( createCacheKey( project.getGroupId(), project.getArtifactId(), project.getVersion() ), new MavenProject( project ) );
// we don't have to force the collision exception for superModel here, it's already been done in getSuperModel()
MavenProject previousProject = superProject;
@@ -741,7 +745,7 @@ private MavenProject buildInternal( String pomLocation,
throw new InvalidProjectModelException( projectId, pomLocation, e.getMessage(), e );
}
- projectCache.put( createCacheKey( project.getGroupId(), project.getArtifactId(), project.getVersion() ), project );
+ processedProjectCache.put( createCacheKey( project.getGroupId(), project.getArtifactId(), project.getVersion() ), project );
// jvz:note
// this only happens if we are building from a source file
@@ -761,10 +765,25 @@ private MavenProject buildInternal( String pomLocation,
// Only track the file of a POM in the source tree
project.setFile( projectDescriptor );
}
+
+ MavenProject rawParent = project.getParent();
+
+ if ( rawParent != null )
+ {
+ String cacheKey = createCacheKey( rawParent.getGroupId(), rawParent.getArtifactId(), rawParent.getVersion() );
+
+ MavenProject processedParent = (MavenProject) processedProjectCache.get( cacheKey );
+
+ // yeah, this null check might be a bit paranoid, but better safe than sorry...
+ if ( processedParent != null )
+ {
+ project.setParent( processedParent );
+ }
+ }
return project;
}
-
+
private String safeVersionlessKey( String groupId, String artifactId )
{
String gid = groupId;
@@ -1009,7 +1028,17 @@ else if ( StringUtils.isEmpty( parentModel.getVersion() ) )
File parentDescriptor = null;
model = null;
-
+
+ String parentKey = createCacheKey( parentModel.getGroupId(), parentModel.getArtifactId(), parentModel.getVersion() );
+ MavenProject parentProject = (MavenProject) rawProjectCache.get( parentKey );
+
+ if ( parentProject != null )
+ {
+ model = ModelUtils.cloneModel( parentProject.getModel() );
+
+ parentDescriptor = parentProject.getFile();
+ }
+
String parentRelativePath = parentModel.getRelativePath();
// if we can't find a cached model matching the parent spec, then let's try to look on disk using
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 2e80f2f3cc..20e818c53d 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
@@ -173,30 +173,71 @@ public MavenProject( MavenProject project )
{
this.dependencyArtifacts = Collections.unmodifiableSet( project.dependencyArtifacts );
}
+
if ( project.artifacts != null )
{
this.artifacts = Collections.unmodifiableSet( project.artifacts );
}
- this.pluginArtifacts = Collections.unmodifiableSet( project.pluginArtifacts );
- this.reportArtifacts = Collections.unmodifiableSet( project.reportArtifacts );
- this.extensionArtifacts = Collections.unmodifiableSet( project.extensionArtifacts );
+
+ if ( project.pluginArtifacts != null )
+ {
+ this.pluginArtifacts = Collections.unmodifiableSet( project.pluginArtifacts );
+ }
+
+ if ( project.reportArtifacts != null )
+ {
+ this.reportArtifacts = Collections.unmodifiableSet( project.reportArtifacts );
+ }
+
+ if ( project.extensionArtifacts != null )
+ {
+ this.extensionArtifacts = Collections.unmodifiableSet( project.extensionArtifacts );
+ }
+
this.parentArtifact = project.parentArtifact;
- this.remoteArtifactRepositories = Collections.unmodifiableList( project.remoteArtifactRepositories );
- this.pluginArtifactRepositories = Collections.unmodifiableList( project.pluginArtifactRepositories );
- this.collectedProjects = Collections.unmodifiableList( project.collectedProjects );
- this.activeProfiles = Collections.unmodifiableList( project.activeProfiles );
-
- // clone properties modifyable by plugins in a forked lifecycle
- this.attachedArtifacts = new ArrayList( project.getAttachedArtifacts() );
-
- // no need for execution project
-
- // clone source roots
- this.compileSourceRoots = new ArrayList( project.compileSourceRoots );
- this.testCompileSourceRoots = new ArrayList( project.testCompileSourceRoots );
- this.scriptSourceRoots = new ArrayList( project.scriptSourceRoots );
-
+ if ( project.remoteArtifactRepositories != null )
+ {
+ this.remoteArtifactRepositories = Collections.unmodifiableList( project.remoteArtifactRepositories );
+ }
+
+ if ( project.pluginArtifactRepositories != null )
+ {
+ this.pluginArtifactRepositories = Collections.unmodifiableList( project.pluginArtifactRepositories );
+ }
+
+ if ( project.collectedProjects != null )
+ {
+ this.collectedProjects = Collections.unmodifiableList( project.collectedProjects );
+ }
+
+ if ( project.activeProfiles != null )
+ {
+ this.activeProfiles = Collections.unmodifiableList( project.activeProfiles );
+ }
+
+ if ( project.getAttachedArtifacts() != null )
+ {
+ // clone properties modifyable by plugins in a forked lifecycle
+ this.attachedArtifacts = new ArrayList( project.getAttachedArtifacts() );
+ }
+
+ if ( project.compileSourceRoots != null )
+ {
+ // clone source roots
+ this.compileSourceRoots = new ArrayList( project.compileSourceRoots );
+ }
+
+ if ( project.testCompileSourceRoots != null )
+ {
+ this.testCompileSourceRoots = new ArrayList( project.testCompileSourceRoots );
+ }
+
+ if ( project.scriptSourceRoots != null )
+ {
+ this.scriptSourceRoots = new ArrayList( project.scriptSourceRoots );
+ }
+
this.model = ModelUtils.cloneModel( project.model );
if ( project.originalModel != null )
@@ -206,7 +247,10 @@ public MavenProject( MavenProject project )
this.executionRoot = project.executionRoot;
- this.artifact = ArtifactUtils.copyArtifact( project.artifact );
+ if ( project.artifact != null )
+ {
+ this.artifact = ArtifactUtils.copyArtifact( project.artifact );
+ }
}
// TODO: Find a way to use here...it's tricky, because the moduleProject
@@ -802,7 +846,14 @@ public void setGroupId( String groupId )
public String getGroupId()
{
- return model.getGroupId();
+ String groupId = model.getGroupId();
+
+ if ( groupId == null && model.getParent() != null )
+ {
+ groupId = model.getParent().getGroupId();
+ }
+
+ return groupId;
}
public void setArtifactId( String artifactId )
@@ -840,7 +891,14 @@ public void setVersion( String version )
public String getVersion()
{
- return model.getVersion();
+ String version = model.getVersion();
+
+ if ( version == null && model.getParent() != null )
+ {
+ version = model.getParent().getVersion();
+ }
+
+ return version;
}
public String getPackaging()
diff --git a/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java b/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java
index 79c57c4471..df3af8458c 100644
--- a/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java
+++ b/maven-project/src/test/java/org/apache/maven/project/MavenProjectTest.java
@@ -20,11 +20,35 @@
import java.io.IOException;
import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
public class MavenProjectTest
extends AbstractMavenProjectTestCase
{
+ public void testIdentityProtoInheritance()
+ {
+ Parent parent = new Parent();
+
+ parent.setGroupId( "test-group" );
+ parent.setVersion( "1000" );
+ parent.setArtifactId( "test-artifact" );
+
+ Model model = new Model();
+
+ model.setParent( parent );
+ model.setArtifactId( "real-artifact" );
+
+ MavenProject project = new MavenProject( model );
+
+ assertEquals( "groupId proto-inheritance failed.", "test-group", project.getGroupId() );
+ assertEquals( "artifactId is masked.", "real-artifact", project.getArtifactId() );
+ assertEquals( "version proto-inheritance failed.", "1000", project.getVersion() );
+
+ // draw the NPE.
+ project.getId();
+ }
+
public void testEmptyConstructor()
{
MavenProject project = new MavenProject();
diff --git a/maven-project/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java b/maven-project/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java
new file mode 100644
index 0000000000..aa1dcf0ec4
--- /dev/null
+++ b/maven-project/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java
@@ -0,0 +1,120 @@
+package org.apache.maven.project.inheritance.t02;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.MailingList;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+
+/**
+ * A test which demonstrates maven's recursive inheritance where
+ * a distinct value is taken from each parent contributing to the
+ * the final model of the project being assembled. There is no
+ * overriding going on amongst the models being used in this test:
+ * each model in the lineage is providing a value that is not present
+ * anywhere else in the lineage. We are just making sure that values
+ * down in the lineage are bubbling up where they should.
+ *
+ * @author Jason van Zyl
+ * @version $Id$
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p4 inherits from p3
+ // p3 inherits from p2
+ // p2 inherits from p1
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p4 ---> p3 ---> p2 ---> p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testProjectInheritance()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+ File pom1 = new File( pom0.getParentFile(), "p1/pom.xml" );
+ File pom2 = new File( pom1.getParentFile(), "p2/pom.xml" );
+ File pom3 = new File( pom2.getParentFile(), "p3/pom.xml" );
+ File pom4 = new File( pom3.getParentFile(), "p4/pom.xml" );
+ File pom5 = new File( pom4.getParentFile(), "p5/pom.xml" );
+
+ System.out.println( "Location of project-4's POM: " + pom4.getPath() );
+
+ // load everything...
+ MavenProject project0 = getProject( pom0 );
+ MavenProject project1 = getProject( pom1 );
+ MavenProject project2 = getProject( pom2 );
+ MavenProject project3 = getProject( pom3 );
+ MavenProject project4 = getProject( pom4 );
+ MavenProject project5 = getProject( pom5 );
+
+ assertEquals( "p4", project4.getName() );
+
+ // ----------------------------------------------------------------------
+ // Value inherited from p3
+ // ----------------------------------------------------------------------
+
+ assertEquals( "2000", project4.getInceptionYear() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from p2
+ // ----------------------------------------------------------------------
+
+ assertEquals( "mailing-list", ( (MailingList) project4.getMailingLists().get( 0 ) ).getName() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from p1
+ // ----------------------------------------------------------------------
+
+ assertEquals( "scm-url/p2/p3/p4", project4.getScm().getUrl() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from p4
+ // ----------------------------------------------------------------------
+
+ assertEquals( "Codehaus", project4.getOrganization().getName() );
+
+ // ----------------------------------------------------------------------
+ // Value taken from super model
+ // ----------------------------------------------------------------------
+
+ assertEquals( "4.0.0", project4.getModelVersion() );
+
+ Build build = project4.getBuild();
+ List plugins = build.getPlugins();
+
+ assertEquals( 1, plugins.size() );
+
+ Plugin plugin = (Plugin) plugins.get( 0 );
+ List executions = plugin.getExecutions();
+
+ assertEquals( 1, executions.size() );
+ }
+}
diff --git a/maven-project/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java b/maven-project/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java
new file mode 100644
index 0000000000..807260f564
--- /dev/null
+++ b/maven-project/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java
@@ -0,0 +1,72 @@
+package org.apache.maven.project.inheritance.t03;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.MailingList;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * A test which demonstrates maven's recursive inheritance where
+ * a distinct value is taken from each parent contributing to the
+ * the final model of the project being assembled. There is no
+ * overriding going on amongst the models being used in this test:
+ * each model in the lineage is providing a value that is not present
+ * anywhere else in the lineage. We are just making sure that values
+ * down in the lineage are bubbling up where they should.
+ *
+ * @author Jason van Zyl
+ * @version $Id$
+ */
+public class ProjectInheritanceTest
+ extends AbstractProjectInheritanceTestCase
+{
+ // ----------------------------------------------------------------------
+ //
+ // p1 inherits from p0
+ // p0 inhertis from super model
+ //
+ // or we can show it graphically as:
+ //
+ // p1 ---> p0 --> super model
+ //
+ // ----------------------------------------------------------------------
+
+ public void testProjectInheritance()
+ throws Exception
+ {
+ File localRepo = getLocalRepositoryPath();
+ File pom0 = new File( localRepo, "p0/pom.xml" );
+
+ File pom0Basedir = pom0.getParentFile();
+
+ File pom1 = new File( pom0Basedir, "p1/pom.xml" );
+
+ // load everything...
+ MavenProject project0 = getProject( pom0 );
+ MavenProject project1 = getProject( pom1 );
+
+ assertEquals( pom0Basedir, project1.getParent().getBasedir() );
+ }
+}
diff --git a/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/p5/pom.xml b/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/p5/pom.xml
new file mode 100644
index 0000000000..0a14aa92ba
--- /dev/null
+++ b/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/p5/pom.xml
@@ -0,0 +1,13 @@
+
+
+ p3
+ maven
+ 1.0
+
+ 4.0.0
+ maven
+ p5
+ jar
+ p5
+ 1.0
+
\ No newline at end of file
diff --git a/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/pom.xml b/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/pom.xml
new file mode 100644
index 0000000000..dc9a273529
--- /dev/null
+++ b/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/pom.xml
@@ -0,0 +1,13 @@
+
+
+ p3
+ maven
+ 1.0
+
+ 4.0.0
+ maven
+ p4
+ jar
+ p4
+ 1.0
+
\ No newline at end of file
diff --git a/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/pom.xml b/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/pom.xml
new file mode 100644
index 0000000000..d40684e970
--- /dev/null
+++ b/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/pom.xml
@@ -0,0 +1,14 @@
+
+
+ p2
+ maven
+ 1.0
+
+ 4.0.0
+ maven
+ p3
+ pom
+ p3
+ 1.0
+ 2000
+
\ No newline at end of file
diff --git a/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/pom.xml b/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/pom.xml
new file mode 100644
index 0000000000..9ac112ac46
--- /dev/null
+++ b/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/p2/pom.xml
@@ -0,0 +1,18 @@
+
+
+ p1
+ maven
+ 1.0
+
+ 4.0.0
+ maven
+ p2
+ pom
+ p2
+ 1.0
+
+
+ mailing-list
+
+
+
\ No newline at end of file
diff --git a/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/pom.xml b/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/pom.xml
new file mode 100644
index 0000000000..6be4a87a34
--- /dev/null
+++ b/maven-project/src/test/resources/inheritance-repo/t02/p0/p1/pom.xml
@@ -0,0 +1,32 @@
+
+
+ p0
+ maven
+ 1.0
+
+ 4.0.0
+ maven
+ p1
+ pom
+ p1
+ 1.0
+
+ scm-url
+
+
+
+
+ maven-compiler-plugin
+
+
+ test
+ package
+
+ compile
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/maven-project/src/test/resources/inheritance-repo/t02/p0/pom.xml b/maven-project/src/test/resources/inheritance-repo/t02/p0/pom.xml
new file mode 100644
index 0000000000..92c9f41d22
--- /dev/null
+++ b/maven-project/src/test/resources/inheritance-repo/t02/p0/pom.xml
@@ -0,0 +1,11 @@
+
+ 4.0.0
+ maven
+ p0
+ pom
+ p0
+ 1.0
+
+ Codehaus
+
+
\ No newline at end of file
diff --git a/maven-project/src/test/resources/inheritance-repo/t03/p0/p1/pom.xml b/maven-project/src/test/resources/inheritance-repo/t03/p0/p1/pom.xml
new file mode 100644
index 0000000000..fc305189cc
--- /dev/null
+++ b/maven-project/src/test/resources/inheritance-repo/t03/p0/p1/pom.xml
@@ -0,0 +1,26 @@
+
+
+ p0
+ maven
+ 1.0
+
+ 4.0.0
+ maven
+ p1
+ pom
+ p1
+ 1.0
+
+ scm-url
+
+
+
+
+ maven-antrun-plugin
+
+ ${project.parent.basedir}
+
+
+
+
+
\ No newline at end of file
diff --git a/maven-project/src/test/resources/inheritance-repo/t03/p0/pom.xml b/maven-project/src/test/resources/inheritance-repo/t03/p0/pom.xml
new file mode 100644
index 0000000000..92c9f41d22
--- /dev/null
+++ b/maven-project/src/test/resources/inheritance-repo/t03/p0/pom.xml
@@ -0,0 +1,11 @@
+
+ 4.0.0
+ maven
+ p0
+ pom
+ p0
+ 1.0
+
+ Codehaus
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index bad81f374a..d14bbcb976 100644
--- a/pom.xml
+++ b/pom.xml
@@ -156,6 +156,9 @@
org.codehaus.plexus
plexus-container-default
+
1.0-alpha-9
diff --git a/src/assemble/src.xml b/src/assemble/src.xml
new file mode 100644
index 0000000000..a04dfffe04
--- /dev/null
+++ b/src/assemble/src.xml
@@ -0,0 +1,38 @@
+
+ src
+
+ tar.gz
+ tar.bz2
+ zip
+
+ true
+
+
+ maven-archiver
+ maven-artifact
+ maven-artifact-manager
+ maven-artifact-test
+ maven-core
+ maven-error-diagnostics
+ maven-model
+ maven-model-converter
+ maven-monitor
+ maven-plugin-api
+ maven-plugin-descriptor
+ maven-plugin-parameter-documenter
+ maven-plugin-registry
+ maven-plugin-tools
+ maven-profile
+ maven-project
+ maven-reporting
+ maven-repository-metadata
+ maven-script
+ maven-settings
+
+