Author: jdcasey
Date: Tue Jul 26 12:45:45 2005
New Revision: 225379
URL: http://svn.apache.org/viewcvs?rev=225379&view=rev
Log:
Working on: MNG-521
o Cleaned up output from discovery of MavenProjectBuilder instance in
MavenProjectTestCase.
o Added <relativePath/> to parent in maven.mdo (default value is '../pom.xml')
o Added filesystem parent-POM search using <relativePath/>...if discovered pom
doesn't match the parent specification (g:a:v), then it's not used - the parent
is resolved - and search for ancestor POMs on disk goes no further.
NOTE: Next thing is to reactor-ize the release plugin, then MNG-521 should be
implemented.
Modified:
maven/components/trunk/maven-model/maven.mdo
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/MavenProjectTestCase.java
Modified: maven/components/trunk/maven-model/maven.mdo
URL:
http://svn.apache.org/viewcvs/maven/components/trunk/maven-model/maven.mdo?rev=225379&r1=225378&r2=225379&view=diff
==============================================================================
--- maven/components/trunk/maven-model/maven.mdo (original)
+++ maven/components/trunk/maven-model/maven.mdo Tue Jul 26 12:45:45 2005
@@ -1675,6 +1675,13 @@
<description><![CDATA[The version of the project to
extend.]]></description>
<type>String</type>
</field>
+ <field>
+ <name>relativePath</name>
+ <version>4.0.0</version>
+ <description><![CDATA[The relative path of the parent-pom within the
project hierarchy]]></description>
+ <type>String</type>
+ <defaultValue>../pom.xml</defaultValue>
+ </field>
</fields>
</class>
<class>
Modified:
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL:
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=225379&r1=225378&r2=225379&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
(original)
+++
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
Tue Jul 26 12:45:45 2005
@@ -224,7 +224,7 @@
modelCache.put( createCacheKey( model.getGroupId(),
model.getArtifactId(), model.getVersion() ), model );
MavenProject project = build( projectDescriptor.getAbsolutePath(),
model, localRepository,
- Collections.EMPTY_LIST, externalProfiles
);
+ Collections.EMPTY_LIST,
externalProfiles, projectDescriptor.getAbsoluteFile().getParentFile() );
// Only translate the base directory for files in the source tree
pathTranslator.alignToBaseDirectory( project.getModel(),
projectDescriptor );
@@ -247,7 +247,7 @@
Model model = findModelFromRepository( artifact,
remoteArtifactRepositories, localRepository );
return build( "Artifact [" + artifact.getId() + "]", model,
localRepository, remoteArtifactRepositories,
- Collections.EMPTY_LIST );
+ Collections.EMPTY_LIST, null );
}
private Model findModelFromRepository( Artifact artifact, List
remoteArtifactRepositories,
@@ -303,7 +303,7 @@
}
private MavenProject build( String pomLocation, Model model,
ArtifactRepository localRepository,
- List remoteArtifactRepositories, List
externalProfiles )
+ List remoteArtifactRepositories, List
externalProfiles, File projectDir )
throws ProjectBuildingException
{
Model superModel = getSuperModel();
@@ -341,7 +341,7 @@
List repositories = new ArrayList( aggregatedRemoteWagonRepositories );
- MavenProject project = assembleLineage( model, lineage, repositories,
localRepository );
+ MavenProject project = assembleLineage( model, lineage, repositories,
localRepository, externalProfiles, projectDir );
project.setOriginalModel( originalModel );
@@ -475,7 +475,7 @@
/** @noinspection CollectionDeclaredAsConcreteClass*/
private MavenProject assembleLineage( Model model, LinkedList lineage,
List aggregatedRemoteWagonRepositories,
- ArtifactRepository localRepository )
+ ArtifactRepository localRepository,
List externalProfiles, File projectDir )
throws ProjectBuildingException
{
if ( !model.getRepositories().isEmpty() )
@@ -514,27 +514,81 @@
{
throw new ProjectBuildingException( "Missing version element
from parent element" );
}
+
+ 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;
+
+ 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
+ // <relativePath/>
+ if ( model == null && projectDir != null &&
StringUtils.isNotEmpty(parentRelativePath) )
+ {
+ File parentDescriptor = new File( projectDir,
parentRelativePath );
+
+ try
+ {
+ parentDescriptor = parentDescriptor.getCanonicalFile();
+ }
+ catch ( IOException e )
+ {
+ getLogger().debug( "Failed to canonicalize potential
parent POM: \'" + parentDescriptor + "\'", e );
+
+ parentDescriptor = null;
+ }
+
+ if ( parentDescriptor != null && parentDescriptor.exists() )
+ {
+ Model candidateParent = readModel( parentDescriptor );
+
+ // this works because parent-version is still required...
+ 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() ) ) ) )
+ {
+ model = candidateParent;
+
+ parentProjectDir = parentDescriptor.getParentFile();
+
+ getLogger().debug( "Using parent-POM from the project
hierarchy at: \'" + parentModel.getRelativePath() + "\' for project: " +
project.getId() );
+ }
+ else
+ {
+ getLogger().debug("Invalid parent-POM referenced by
relative path: \'" + parentModel.getRelativePath() + "\'. It did not match
parent specification in " + project.getId() );
+ }
+ }
+ }
+
+ Artifact parentArtifact = null;
- //!! (**)
- //
----------------------------------------------------------------------
- // Do we have the necessary information to actually find the parent
- // POMs here?? I don't think so ... Say only one remote repository
is
- // specified and that is ibiblio then this model that we just read
doesn't
- // have any repository information ... I think we might have to
inherit
- // as we go in order to do this.
- //
----------------------------------------------------------------------
-
- Artifact artifact = artifactFactory.createParentArtifact(
parentModel.getGroupId(),
-
parentModel.getArtifactId(),
-
parentModel.getVersion() );
+ // only resolve the parent model from the repository system if we
didn't find it on disk...
+ if ( model == null )
+ {
+ //!! (**)
+ //
----------------------------------------------------------------------
+ // Do we have the necessary information to actually find the
parent
+ // POMs here?? I don't think so ... Say only one remote
repository is
+ // specified and that is ibiblio then this model that we just
read doesn't
+ // have any repository information ... I think we might have
to inherit
+ // as we go in order to do this.
+ //
----------------------------------------------------------------------
+
+ parentArtifact = artifactFactory.createParentArtifact(
parentModel.getGroupId(),
+
parentModel.getArtifactId(),
+
parentModel.getVersion() );
- model = findModelFromRepository( artifact,
aggregatedRemoteWagonRepositories, localRepository );
+ model = findModelFromRepository( parentArtifact,
aggregatedRemoteWagonRepositories, localRepository );
+ }
- MavenProject parent = assembleLineage( model, lineage,
aggregatedRemoteWagonRepositories, localRepository );
+ MavenProject parent = assembleLineage( model, lineage,
aggregatedRemoteWagonRepositories, localRepository, externalProfiles,
parentProjectDir );
project.setParent( parent );
- project.setParentArtifact( artifact );
+ project.setParentArtifact( parentArtifact );
}
return project;
Modified:
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/MavenProjectTestCase.java
URL:
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/MavenProjectTestCase.java?rev=225379&r1=225378&r2=225379&view=diff
==============================================================================
---
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/MavenProjectTestCase.java
(original)
+++
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/MavenProjectTestCase.java
Tue Jul 26 12:45:45 2005
@@ -41,17 +41,15 @@
{
super.setUp();
- try
+ if ( getContainer().hasComponent( MavenProjectBuilder.ROLE, "test" ) )
{
projectBuilder = (MavenProjectBuilder) lookup(
MavenProjectBuilder.ROLE, "test" );
}
- catch ( ComponentLookupException e )
+ else
{
// default over to the main project builder...
projectBuilder = (MavenProjectBuilder) lookup(
MavenProjectBuilder.ROLE );
}
-
- System.out.println("Using project builder: " +
projectBuilder.getClass().getName() + " for tests in: " + getClass().getName());
}
// ----------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]