You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2007/08/10 22:49:15 UTC
svn commit: r564761 - in /maven/components/trunk:
maven-core/src/main/java/org/apache/maven/extension/
maven-project/src/main/java/org/apache/maven/project/
maven-project/src/main/java/org/apache/maven/project/build/model/
maven-project/src/test/java/o...
Author: jdcasey
Date: Fri Aug 10 13:49:14 2007
New Revision: 564761
URL: http://svn.apache.org/viewvc?view=rev&rev=564761
Log:
Fixing a few problems with the model-lineage builder, where it was stubbing models inappropriately and other minor logical problems.
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineage.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineageBuilder.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineage.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineageBuilder.java
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/build/model/DefaultModelLineageBuilderTest.java
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java?view=diff&rev=564761&r1=564760&r2=564761
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java Fri Aug 10 13:49:14 2007
@@ -330,7 +330,7 @@
getLogger().debug( "Building model-lineage for: " + pom + " to pre-scan for extensions." );
lineage = modelLineageBuilder.buildModelLineage( pom, localRepository, originalRemoteRepositories,
- globalProfileManager );
+ globalProfileManager, false );
}
catch ( ProjectBuildingException e )
{
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?view=diff&rev=564761&r1=564760&r2=564761
==============================================================================
--- 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 Fri Aug 10 13:49:14 2007
@@ -754,11 +754,11 @@
getLogger().debug( "Cannot determine whether " + currentProject.getId() + " is a module of " + previousProject.getId() + ". Reason: " + e.getMessage(), e );
}
- getLogger().debug( "[buildInternal] Assembling model-inheritance: child=" + current.getId() + ", parent=" + previous.getId() );
+ getLogger().debug( "[buildInternal] Assembling model-inheritance: child=" + current.getId() + " has distributionManagement? " + ( current.getDistributionManagement() != null ) + ", parent=" + previous.getId() + " has distributionManagement? " + ( previous.getDistributionManagement() != null ) );
modelInheritanceAssembler.assembleModelInheritance( current, previous, pathAdjustment );
- getLogger().debug( "[buildInternal] Assembled model-inheritance for child=" + current.getId() );
+ getLogger().debug( "[buildInternal] Assembled model-inheritance for child=" + current.getId() + " (has distributionManagement? " + ( current.getDistributionManagement() != null ) + ")" );
previous = current;
previousProject = currentProject;
@@ -1054,7 +1054,8 @@
ModelLineage modelLineage = new DefaultModelLineage();
modelLineage.setOrigin( model, new File( projectDir, "pom.xml" ), new ArrayList( aggregatedRemoteWagonRepositories ) );
- modelLineageBuilder.resumeBuildingModelLineage( modelLineage, localRepository, externalProfileManager );
+ // strict means "no stubs", so we invert it here for the allowStubs parameter.
+ modelLineageBuilder.resumeBuildingModelLineage( modelLineage, localRepository, externalProfileManager, !strict );
ProjectBuildContext projectContext = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
@@ -1079,8 +1080,6 @@
for ( ModelLineageIterator it = modelLineage.lineageIterator(); it.hasNext(); )
{
Model currentModel = (Model) it.next();
-
- getLogger().debug( "[assembleLineage] Assembling MavenProject instance for: " + currentModel.getId() );
File currentPom = it.getPOMFile();
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineage.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineage.java?view=diff&rev=564761&r1=564760&r2=564761
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineage.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineage.java Fri Aug 10 13:49:14 2007
@@ -45,7 +45,7 @@
{
throw new IllegalStateException( "You must call setOrigin(..) before adding a parent to the lineage." );
}
-
+
tuples.add( new ModelLineageTuple( model, pomFile, artifactRepositories ) );
}
@@ -123,18 +123,18 @@
{
return Collections.EMPTY_LIST;
}
-
+
List tuplesInReverse = new ArrayList( tuples );
Collections.reverse( tuplesInReverse );
-
+
List results = new ArrayList( tuplesInReverse.size() );
for ( Iterator it = tuplesInReverse.iterator(); it.hasNext(); )
{
ModelLineageTuple tuple = (ModelLineageTuple) it.next();
-
+
results.add( tuple.remoteRepositories );
}
-
+
return results;
}
@@ -156,18 +156,18 @@
{
return Collections.EMPTY_LIST;
}
-
+
List tuplesInReverse = new ArrayList( tuples );
Collections.reverse( tuplesInReverse );
-
+
List results = new ArrayList( tuplesInReverse.size() );
for ( Iterator it = tuplesInReverse.iterator(); it.hasNext(); )
{
ModelLineageTuple tuple = (ModelLineageTuple) it.next();
-
+
results.add( tuple.file );
}
-
+
return results;
}
@@ -177,18 +177,18 @@
{
return Collections.EMPTY_LIST;
}
-
+
List tuplesInReverse = new ArrayList( tuples );
Collections.reverse( tuplesInReverse );
-
+
List results = new ArrayList( tuplesInReverse.size() );
for ( Iterator it = tuplesInReverse.iterator(); it.hasNext(); )
{
ModelLineageTuple tuple = (ModelLineageTuple) it.next();
-
+
results.add( tuple.model );
}
-
+
return results;
}
@@ -198,9 +198,9 @@
{
return null;
}
-
+
ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( 0 );
-
+
return tuple.remoteRepositories;
}
@@ -210,9 +210,9 @@
{
return null;
}
-
+
ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( 0 );
-
+
return tuple.model;
}
@@ -222,45 +222,45 @@
{
return null;
}
-
+
ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( 0 );
-
+
return tuple.file;
}
- public List getDeepestArtifactRepositoryList()
+ public List getDeepestAncestorArtifactRepositoryList()
{
if ( tuples.isEmpty() )
{
return null;
}
-
+
ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( tuples.size() - 1 );
-
+
return tuple.remoteRepositories;
}
- public File getDeepestFile()
+ public File getDeepestAncestorFile()
{
if ( tuples.isEmpty() )
{
return null;
}
-
+
ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( tuples.size() - 1 );
-
+
return tuple.file;
}
- public Model getDeepestModel()
+ public Model getDeepestAncestorModel()
{
if ( tuples.isEmpty() )
{
return null;
}
-
+
ModelLineageTuple tuple = (ModelLineageTuple) tuples.get( tuples.size() - 1 );
-
+
return tuple.model;
}
@@ -298,7 +298,7 @@
{
throw new IllegalStateException( "Origin already set; you must use addParent(..) for successive additions to the lineage." );
}
-
+
tuples.add( new ModelLineageTuple( model, pomFile, artifactRepositories ) );
}
@@ -309,7 +309,7 @@
{
return tuples.size();
}
-
+
private static final class ModelLineageTuple
{
private Model model;
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineageBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineageBuilder.java?view=diff&rev=564761&r1=564760&r2=564761
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineageBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineageBuilder.java Fri Aug 10 13:49:14 2007
@@ -87,7 +87,7 @@
* @see org.apache.maven.project.build.model.ModelLineageBuilder#buildModelLineage(java.io.File, org.apache.maven.artifact.repository.ArtifactRepository, java.util.List)
*/
public ModelLineage buildModelLineage( File pom, ArtifactRepository localRepository, List remoteRepositories,
- ProfileManager profileManager )
+ ProfileManager profileManager, boolean allowStubs )
throws ProjectBuildingException
{
ProjectBuildCache projectBuildCache = ProjectBuildCache.read( buildContextManager );
@@ -99,7 +99,7 @@
ModelAndFile current = new ModelAndFile( readModel( pom, projectBuildCache ), pom );
- while ( current != null )
+ do
{
if ( lineage.size() == 0 )
{
@@ -112,44 +112,43 @@
currentRemoteRepositories = updateRepositorySet( current.model, currentRemoteRepositories, current.file, profileManager );
- current = resolveParentPom( current, currentRemoteRepositories, localRepository, projectBuildCache );
+ current = resolveParentPom( current, currentRemoteRepositories, localRepository, projectBuildCache, allowStubs );
}
+ while ( current != null );
return lineage;
}
public void resumeBuildingModelLineage( ModelLineage lineage, ArtifactRepository localRepository,
- ProfileManager profileManager )
+ ProfileManager profileManager, boolean allowStubs )
throws ProjectBuildingException
{
+ if ( lineage.size() == 0 )
+ {
+ throw new ProjectBuildingException( "unknown", "Cannot resume a ModelLineage that doesn't contain at least one Model instance." );
+ }
+
ProjectBuildCache projectBuildCache = ProjectBuildCache.read( buildContextManager );
- List currentRemoteRepositories = lineage.getDeepestArtifactRepositoryList();
+ List currentRemoteRepositories = lineage.getDeepestAncestorArtifactRepositoryList();
if ( currentRemoteRepositories == null )
{
currentRemoteRepositories = new ArrayList();
}
- ModelAndFile current = new ModelAndFile( lineage.getDeepestModel(), lineage.getDeepestFile() );
+ ModelAndFile current = new ModelAndFile( lineage.getDeepestAncestorModel(), lineage.getDeepestAncestorFile() );
// use the above information to re-bootstrap the resolution chain...
- current = resolveParentPom( current, currentRemoteRepositories, localRepository, projectBuildCache );
+ current = resolveParentPom( current, currentRemoteRepositories, localRepository, projectBuildCache, allowStubs );
while ( current != null )
{
- if ( lineage.size() == 0 )
- {
- lineage.setOrigin( current.model, current.file, currentRemoteRepositories );
- }
- else
- {
- lineage.addParent( current.model, current.file, currentRemoteRepositories );
- }
+ lineage.addParent( current.model, current.file, currentRemoteRepositories );
currentRemoteRepositories = updateRepositorySet( current.model, currentRemoteRepositories, current.file, profileManager );
- current = resolveParentPom( current, currentRemoteRepositories, localRepository, projectBuildCache );
+ current = resolveParentPom( current, currentRemoteRepositories, localRepository, projectBuildCache, allowStubs );
}
}
@@ -290,9 +289,10 @@
* Pull the parent specification out of the given model, construct an Artifact instance, and
* resolve that artifact...then, return the resolved POM file for the parent.
* @param projectBuildCache
+ * @param allowStubs
*/
private ModelAndFile resolveParentPom( ModelAndFile child, List remoteRepositories, ArtifactRepository localRepository,
- ProjectBuildCache projectBuildCache )
+ ProjectBuildCache projectBuildCache, boolean allowStubs )
throws ProjectBuildingException
{
Model model = child.model;
@@ -304,9 +304,7 @@
if ( modelParent != null )
{
- validateParentDeclaration( modelParent, model );
-
-// getLogger().debug( "Looking for cached parent POM under: " + cacheKey );
+ validateParentDeclaration( modelParent, model );
File parentPomFile = projectBuildCache.getCachedModelFile( modelParent );
@@ -317,26 +315,48 @@
if ( parentPomFile == null )
{
- parentPomFile = resolveParentFromRepositories( modelParent, localRepository, remoteRepositories, modelPomFile );
+ try
+ {
+ parentPomFile = resolveParentFromRepositories( modelParent, localRepository, remoteRepositories, modelPomFile );
+ }
+ catch( ProjectBuildingException e )
+ {
+ if ( allowStubs )
+ {
+ getLogger().debug( "DISREGARDING the error encountered while resolving artifact for: " + modelParent.getId() + ", building a stub model in its place.", e );
+ parentPomFile = null;
+ }
+ else
+ {
+ throw e;
+ }
+ }
}
- Model parent;
if ( parentPomFile == null )
{
- getLogger().warn( "Cannot find parent POM: " + modelParent.getId() + " for child: " + model.getId() + ". Using stub model instead." );
-
- parent = new Model();
-
- parent.setGroupId( modelParent.getGroupId() );
- parent.setArtifactId( modelParent.getArtifactId() );
- parent.setVersion( modelParent.getVersion() );
+ if ( allowStubs )
+ {
+ getLogger().warn( "Cannot find parent POM: " + modelParent.getId() + " for child: " + model.getId() + ". Using stub model instead." );
+
+ Model parent = new Model();
+
+ parent.setGroupId( modelParent.getGroupId() );
+ parent.setArtifactId( modelParent.getArtifactId() );
+ parent.setVersion( modelParent.getVersion() );
+
+ result = new ModelAndFile( parent, parentPomFile );
+ }
+ else
+ {
+ getLogger().error( "Cannot find parent POM: " + modelParent.getId() );
+ }
}
else
{
- parent = readModel( parentPomFile );
+ Model parent = readModel( parentPomFile );
+ result = new ModelAndFile( parent, parentPomFile );
}
-
- result = new ModelAndFile( parent, parentPomFile );
}
return result;
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineage.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineage.java?view=diff&rev=564761&r1=564760&r2=564761
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineage.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineage.java Fri Aug 10 13:49:14 2007
@@ -28,56 +28,56 @@
/**
* Tracks information from a current POM and its ancestors, including Model instances, associated
* POM files, and repository lists used to resolve each model.
- *
+ *
* @author jdcasey
*
*/
public interface ModelLineage
{
-
+
/**
* Retrieve the Model instance for the deepest ancestor which has been resolved so far in this
* lineage.
*/
- Model getDeepestModel();
-
+ Model getDeepestAncestorModel();
+
/**
* Retrieve the POM file for the deepest ancestor which has been resolved so far in this
* lineage.
*/
- File getDeepestFile();
-
+ File getDeepestAncestorFile();
+
/**
- * Retrieve the remote-repository list for the deepest ancestor which has been resolved so far
+ * Retrieve the remote-repository list for the deepest ancestor which has been resolved so far
* in this lineage.
*/
- List getDeepestArtifactRepositoryList();
-
+ List getDeepestAncestorArtifactRepositoryList();
+
/**
- * Retrieve the Model instance for the POM from which this lineage was constructed. This is the
- * "leaf" of the inheritance hierarchy, or the current POM, or the child (all means the same
+ * Retrieve the Model instance for the POM from which this lineage was constructed. This is the
+ * "leaf" of the inheritance hierarchy, or the current POM, or the child (all means the same
* thing).
*/
Model getOriginatingModel();
-
+
/**
- * Retrieve the File for the POM from which this lineage was constructed. This is the
- * "leaf" of the inheritance hierarchy, or the current POM, or the child (all means the same
+ * Retrieve the File for the POM from which this lineage was constructed. This is the
+ * "leaf" of the inheritance hierarchy, or the current POM, or the child (all means the same
* thing).
*/
File getOriginatingPOMFile();
-
+
/**
- * Retrieve the List of ArtifactRepository instances used to resolve the first parent POM of the
- * POM from which this lineage was constructed. This is the "leaf" of the inheritance hierarchy,
+ * Retrieve the List of ArtifactRepository instances used to resolve the first parent POM of the
+ * POM from which this lineage was constructed. This is the "leaf" of the inheritance hierarchy,
* or the current POM, or the child (all means the same thing).
*/
List getOriginatingArtifactRepositoryList();
-
+
/**
- * Setup the originating POM information from which this lineage is constructed. This is the
+ * Setup the originating POM information from which this lineage is constructed. This is the
* "child" POM that is the starting point of the build.
- *
+ *
* @throws IllegalStateException When the originating POM information has already been set.
*/
void setOrigin( Model model, File pomFile, List artifactRepositories );
@@ -85,59 +85,59 @@
/**
* Add a parent model, along with its file and the repositories used to resolve it.
* NOTE: If setOrigin(..) hasn't been called, this method will result in an IllegalStateException.
- *
+ *
* @throws IllegalStateException When the originating POM information has not yet been set.
*/
void addParent( Model model, File pomFile, List artifactRepositories );
-
+
/**
* Retrieve the models in this lineage, with the deepest parent at the zero index, and the current
* POM at the last index.
*/
List getModelsInDescendingOrder();
-
+
/**
- * Retrieve the files used to construct this lineage, with that of the deepest parent at the
+ * Retrieve the files used to construct this lineage, with that of the deepest parent at the
* zero index, and that of the current POM at the last index.
*/
List getFilesInDescendingOrder();
-
+
/**
- * Retrieve the remote-artifact repository lists used to construct this lineage, with
+ * Retrieve the remote-artifact repository lists used to construct this lineage, with
* that of the deepest parent at the zero index, and that of the current POM at the last index.
*/
List getArtifactRepositoryListsInDescendingOrder();
-
+
/**
- * Retrieve an Iterator derivative that functions in the simplest sense just like the return
+ * Retrieve an Iterator derivative that functions in the simplest sense just like the return
* value of the modelIterator() method. However, the ModelLineageIterator also gives access to
- * the current POM file and current remote ArtifactRepository instances used to resolve the
+ * the current POM file and current remote ArtifactRepository instances used to resolve the
* current Model...along with a method to give explicit access to the current Model instance.
*/
ModelLineageIterator lineageIterator();
/**
- * Retrieve an Iterator derivative that functions in the simplest sense just like the return
+ * Retrieve an Iterator derivative that functions in the simplest sense just like the return
* value of the modelIterator() method. However, the ModelLineageIterator also gives access to
- * the current POM file and current remote ArtifactRepository instances used to resolve the
+ * the current POM file and current remote ArtifactRepository instances used to resolve the
* current Model...along with a method to give explicit access to the current Model instance.
*/
ModelLineageIterator reversedLineageIterator();
/**
- * Iterate over the lineage of Model instances, starting with the child (current) Model,
+ * Iterate over the lineage of Model instances, starting with the child (current) Model,
* and ending with the deepest ancestor.
*/
Iterator modelIterator();
/**
- * Iterate over the lineage of POM Files, starting with the child (current) POM and ending with
+ * Iterate over the lineage of POM Files, starting with the child (current) POM and ending with
* the deepest ancestor.
*/
Iterator fileIterator();
/**
- * Iterate over the remote-repository Lists used to resolve the lineage, starting with the
+ * Iterate over the remote-repository Lists used to resolve the lineage, starting with the
* child (current) remote-repository List and ending with the deepest ancestor.
*/
Iterator artifactRepositoryListIterator();
@@ -149,7 +149,7 @@
File getFile( Model model );
/**
- * Retrieve the List of remote repositories from which the given Model instance was resolved.
+ * Retrieve the List of remote repositories from which the given Model instance was resolved.
* If the model itself doesn't belong to this lineage, match it in the lineage by Model.getId().
*/
List getArtifactRepositories( Model model );
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineageBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineageBuilder.java?view=diff&rev=564761&r1=564760&r2=564761
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineageBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelLineageBuilder.java Fri Aug 10 13:49:14 2007
@@ -29,7 +29,7 @@
/**
* Builds the lineage of Model instances, starting from a given POM file, and stretching back through
* all of the parent POMs that are defined in the respective <parent/> sections.
- *
+ *
* NOTE: In all of the build/resume methods below, each Model MUST have its active profiles searched
* for new repositories from which to discover parent POMs.
*/
@@ -39,33 +39,37 @@
String ROLE = ModelLineageBuilder.class.getName();
/**
- * Construct a lineage of the current POM plus all of its ancestors.
- *
- * COMING: Also, set ProjectBuildContext.currentModelLineage build-context to the result of this
+ * Construct a lineage of the current POM plus all of its ancestors.
+ *
+ * COMING: Also, set ProjectBuildContext.currentModelLineage build-context to the result of this
* method before returning.
- *
+ *
* @param pom The current POM, whose Model will terminate the constructed lineage
* @param localRepository The local repository against which parent POMs should be resolved
- * @param remoteRepositories List of ArtifactRepository instances against which parent POMs
+ * @param remoteRepositories List of ArtifactRepository instances against which parent POMs
* should be resolved
* @param profileManager The profile manager containing information about global profiles to be
* applied (from settings.xml, for instance)
+ * @param allowStubs Whether stubbed-out Model instances should be constructed in the event that
+ * a parent-POM cannot be resolved.
*/
ModelLineage buildModelLineage( File pom, ArtifactRepository localRepository, List remoteRepositories,
- ProfileManager profileManager )
+ ProfileManager profileManager, boolean allowStubs )
throws ProjectBuildingException;
/**
* Resume the process of constructing a lineage of inherited models, picking up using the deepest
* parent already in the lineage.
- *
+ *
* @param lineage The ModelLineage instance in progress, which should be completed.
* @param localRepository The local repository against which parent POMs should be resolved
* @param profileManager The profile manager containing information about global profiles to be
* applied (from settings.xml, for instance)
+ * @param allowStubs Whether stubbed-out Model instances should be constructed in the event that
+ * a parent-POM cannot be resolved.
*/
void resumeBuildingModelLineage( ModelLineage lineage, ArtifactRepository localRepository,
- ProfileManager profileManager )
+ ProfileManager profileManager, boolean allowStubs )
throws ProjectBuildingException;
}
Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/build/model/DefaultModelLineageBuilderTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/build/model/DefaultModelLineageBuilderTest.java?view=diff&rev=564761&r1=564760&r2=564761
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/build/model/DefaultModelLineageBuilderTest.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/build/model/DefaultModelLineageBuilderTest.java Fri Aug 10 13:49:14 2007
@@ -58,13 +58,13 @@
defaultLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
}
-
+
public void tearDown()
throws Exception
{
BuildContextManager ctxMgr = (BuildContextManager) lookup( BuildContextManager.ROLE );
ctxMgr.clearBuildContext();
-
+
super.tearDown();
}
@@ -96,7 +96,7 @@
IOUtil.close( writer );
}
- ModelLineage lineage = modelLineageBuilder.buildModelLineage( pomFile, null, null, null );
+ ModelLineage lineage = modelLineageBuilder.buildModelLineage( pomFile, null, null, null, false );
assertEquals( 1, lineage.size() );
@@ -150,11 +150,13 @@
writeModel( current, currentPOM );
// 7. build the lineage.
- ArtifactRepository localRepository = new DefaultArtifactRepository( "local", localRepoDirectory.toURL()
- .toExternalForm(), defaultLayout );
+ ArtifactRepository localRepository = new DefaultArtifactRepository(
+ "local",
+ localRepoDirectory.toURL().toExternalForm(),
+ defaultLayout );
ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, localRepository,
- Collections.EMPTY_LIST, null );
+ Collections.EMPTY_LIST, null, false );
assertEquals( 3, lineage.size() );
@@ -165,6 +167,54 @@
assertEquals( ancestor.getId(), ( (Model) modelIterator.next() ).getId() );
}
+ public void testReadPOMWithMissingParentAndAllowStubsSetToTrue()
+ throws IOException, ProjectBuildingException
+ {
+ // 1. create local repository directory
+ File localRepoDirectory = File.createTempFile( "DefaultModelLineageBuilder.localRepository.", "" );
+
+ localRepoDirectory.delete();
+ localRepoDirectory.mkdirs();
+
+ deleteDirOnExit( localRepoDirectory );
+
+ // 5. create the current pom with a parent-ref on the parent model
+ Model current = createModel( "group", "current", "1" );
+
+ Parent currentParent = new Parent();
+ currentParent.setGroupId( "group" );
+ currentParent.setArtifactId( "parent" );
+ currentParent.setVersion( "1" );
+
+ current.setParent( currentParent );
+
+ // 6. write the current pom somewhere
+ File currentPOM = File.createTempFile( "DefaultModelLineageBuilder.test.", ".pom" );
+ currentPOM.deleteOnExit();
+
+ writeModel( current, currentPOM );
+
+ // 7. build the lineage.
+ ArtifactRepository localRepository = new DefaultArtifactRepository(
+ "local",
+ localRepoDirectory.toURL().toExternalForm(),
+ defaultLayout );
+
+ ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, localRepository,
+ Collections.EMPTY_LIST, null, true );
+
+ assertEquals( 2, lineage.size() );
+
+ Iterator modelIterator = lineage.modelIterator();
+
+ assertEquals( current.getId(), ( (Model) modelIterator.next() ).getId() );
+
+ Model parent = (Model) modelIterator.next();
+ assertEquals( currentParent.getGroupId(), parent.getGroupId() );
+ assertEquals( currentParent.getArtifactId(), parent.getArtifactId() );
+ assertEquals( currentParent.getVersion(), parent.getVersion() );
+ }
+
public void testReadPOMWithParentInLocalRepositoryAndAncestorInRemoteRepository()
throws IOException, ProjectBuildingException
{
@@ -219,14 +269,19 @@
writeModel( current, currentPOM );
// 7. build the lineage.
- ArtifactRepository localRepository = new DefaultArtifactRepository( "local", localRepoDirectory.toURL()
- .toExternalForm(), defaultLayout );
-
- ArtifactRepository remoteRepository = new DefaultArtifactRepository( "test", remoteRepoDirectory.toURL()
- .toExternalForm(), defaultLayout );
+ ArtifactRepository localRepository = new DefaultArtifactRepository(
+ "local",
+ localRepoDirectory.toURL().toExternalForm(),
+ defaultLayout );
+
+ ArtifactRepository remoteRepository = new DefaultArtifactRepository( "test",
+ remoteRepoDirectory.toURL()
+ .toExternalForm(),
+ defaultLayout );
- ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, localRepository, Collections
- .singletonList( remoteRepository ), null );
+ ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, localRepository,
+ Collections.singletonList( remoteRepository ),
+ null, false );
assertEquals( 3, lineage.size() );
@@ -277,11 +332,13 @@
writeModel( current, currentPOM );
// 7. build the lineage.
- ArtifactRepository localRepository = new DefaultArtifactRepository( "local", projectRootDirectory.toURL()
- .toExternalForm(), defaultLayout );
+ ArtifactRepository localRepository = new DefaultArtifactRepository( "local",
+ projectRootDirectory.toURL()
+ .toExternalForm(),
+ defaultLayout );
ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, localRepository,
- Collections.EMPTY_LIST, null );
+ Collections.EMPTY_LIST, null, false );
assertEquals( 2, lineage.size() );
@@ -341,9 +398,9 @@
// 4. write the parent model to the local repo directory
writeModel( parent, parentPOM );
-
+
BuildContextManager buildContextManager = (BuildContextManager) lookup( BuildContextManager.ROLE, "default" );
-
+
ProjectBuildCache cache = ProjectBuildCache.read( buildContextManager );
cache.cacheModelFileForModel( parentPOM, parent );
cache.store( buildContextManager );
@@ -366,8 +423,8 @@
writeModel( current, currentPOM );
// 7. build the lineage.
- ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, null, Collections
- .EMPTY_LIST, null );
+ ModelLineage lineage = modelLineageBuilder.buildModelLineage( currentPOM, null, Collections.EMPTY_LIST, null,
+ false );
assertEquals( 2, lineage.size() );
Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java?view=diff&rev=564761&r1=564760&r2=564761
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssemblerTest.java Fri Aug 10 13:49:14 2007
@@ -52,129 +52,129 @@
extends TestCase
{
private ModelInheritanceAssembler assembler = new DefaultModelInheritanceAssembler();
-
+
public void testShouldAdjustChildUrlBasedOnParentAndModulePathInSiblingDir()
{
Model parent = makeBaseModel( "parent" );
-
+
parent.setUrl( "http://www.google.com/parent" );
-
+
Model child = makeBaseModel( "child" );
-
+
// TODO: this is probably what we should be appending...
// child.setUrl( "/child.dir" );
-
+
parent.addModule( "../child" );
-
+
assembler.assembleModelInheritance( child, parent, ".." );
-
+
String resultingUrl = child.getUrl();
-
+
System.out.println( resultingUrl );
-
+
assertEquals( "http://www.google.com/child", resultingUrl );
}
-
+
public void testShouldAdjustPathsThreeLevelsDeepAncestryInRepoAndNonStandardModulePaths()
{
Model top = makeBaseModel( "top" );
-
+
top.setUrl( "http://www.google.com/top" );
-
+
Model middle = makeBaseModel( "middle" );
-
+
top.addModule( "../middle" );
-
+
Model bottom = makeBaseModel( "bottom" );
-
+
middle.addModule( "../bottom" );
-
+
assembler.assembleModelInheritance( middle, top, ".." );
assembler.assembleModelInheritance( bottom, middle, ".." );
-
+
String resultingUrl = bottom.getUrl();
-
+
System.out.println( resultingUrl );
-
+
assertEquals( "http://www.google.com/bottom", resultingUrl );
}
-
+
public void testShouldMergeSuccessiveDependencyManagementSectionsOverThreeLevels()
{
Model top = makeBaseModel( "top" );
-
+
DependencyManagement topMgmt = new DependencyManagement();
-
+
topMgmt.addDependency( makeDep( "top-dep" ) );
-
+
top.setDependencyManagement( topMgmt );
-
+
Model mid = makeBaseModel( "mid" );
-
+
DependencyManagement midMgmt = new DependencyManagement();
-
+
midMgmt.addDependency( makeDep( "mid-dep" ) );
-
+
mid.setDependencyManagement( midMgmt );
-
+
Model bottom = makeBaseModel( "bottom" );
-
+
DependencyManagement bottomMgmt = new DependencyManagement();
-
+
bottomMgmt.addDependency( makeDep( "bottom-dep" ) );
-
+
bottom.setDependencyManagement( bottomMgmt );
-
+
assembler.assembleModelInheritance( mid, top );
-
+
assembler.assembleModelInheritance( bottom, mid );
-
+
DependencyManagement result = bottom.getDependencyManagement();
-
+
List resultDeps = result.getDependencies();
-
+
assertEquals( 3, resultDeps.size() );
}
-
+
public void testShouldMergeDependencyManagementSectionsFromTopTwoLevelsToBottomLevel()
{
Model top = makeBaseModel( "top" );
-
+
DependencyManagement topMgmt = new DependencyManagement();
-
+
topMgmt.addDependency( makeDep( "top-dep" ) );
-
+
top.setDependencyManagement( topMgmt );
-
+
Model mid = makeBaseModel( "mid" );
-
+
DependencyManagement midMgmt = new DependencyManagement();
-
+
midMgmt.addDependency( makeDep( "mid-dep" ) );
-
+
mid.setDependencyManagement( midMgmt );
-
+
Model bottom = makeBaseModel( "bottom" );
-
+
assembler.assembleModelInheritance( mid, top );
-
+
assembler.assembleModelInheritance( bottom, mid );
-
+
DependencyManagement result = bottom.getDependencyManagement();
-
+
List resultDeps = result.getDependencies();
-
+
assertEquals( 2, resultDeps.size() );
}
-
+
private Dependency makeDep( String artifactId )
{
Dependency dep = new Dependency();
-
+
dep.setGroupId( "maven" );
dep.setArtifactId( artifactId );
dep.setVersion( "1.0" );
-
+
return dep;
}
@@ -274,6 +274,62 @@
childDistMgmt.getSnapshotRepository().isUniqueVersion() );
}
+ public void testThreeLevelDistributionManagementInheritance()
+ {
+ Model gpar = makeBaseModel( "gpar" );
+ Model parent = makeBaseModel( "parent" );
+ Model child = makeBaseModel( "child" );
+
+ DistributionManagement distributionManagement = new DistributionManagement();
+ distributionManagement.setDownloadUrl( "downloadUrl" );
+ distributionManagement.setRelocation( new Relocation() );
+ distributionManagement.setStatus( "deployed" );
+
+ DeploymentRepository repository = new DeploymentRepository();
+ repository.setId( "apache.releases" );
+ repository.setUrl( "scp://minotaur.apache.org/www/www.apache.org/dist/java-repository" );
+ repository.setName( "name" );
+ repository.setLayout( "legacy" );
+ distributionManagement.setRepository( repository );
+
+ DeploymentRepository snapshotRepository = new DeploymentRepository();
+ snapshotRepository.setId( "apache.snapshots" );
+ snapshotRepository.setUrl( "scp://minotaur.apache.org/www/cvs.apache.org/repository" );
+ snapshotRepository.setName( "name" );
+ snapshotRepository.setLayout( "legacy" );
+ snapshotRepository.setUniqueVersion( false );
+ distributionManagement.setSnapshotRepository( snapshotRepository );
+
+ Site site = new Site();
+ site.setId( "apache.website" );
+ site.setUrl( "scp://minotaur.apache.org/www/maven.apache.org/" );
+ site.setName( "name3" );
+ distributionManagement.setSite( site );
+
+ gpar.setDistributionManagement( distributionManagement );
+
+ assembler.assembleModelInheritance( parent, gpar );
+ assembler.assembleModelInheritance( child, parent );
+
+ DistributionManagement childDistMgmt = child.getDistributionManagement();
+ assertNotNull( "Check distMgmt inherited", childDistMgmt );
+ assertNull( "Check status NOT inherited", childDistMgmt.getStatus() );
+ assertNull( "Check relocation NOT inherited", childDistMgmt.getRelocation() );
+ assertEquals( "Check downloadUrl inherited", distributionManagement.getDownloadUrl(),
+ childDistMgmt.getDownloadUrl() );
+
+ Site childSite = childDistMgmt.getSite();
+ assertNotNull( "Check site inherited", childSite );
+ assertEquals( "Check id matches", site.getId(), childSite.getId() );
+ assertEquals( "Check name matches", site.getName(), childSite.getName() );
+ assertEquals( "Check url matches with appended path", site.getUrl() + "parent/child", childSite.getUrl() );
+
+ assertRepositoryBase( childDistMgmt.getRepository(), repository );
+ assertRepositoryBase( childDistMgmt.getSnapshotRepository(), snapshotRepository );
+ assertEquals( "Check uniqueVersion is inherited", snapshotRepository.isUniqueVersion(),
+ childDistMgmt.getSnapshotRepository().isUniqueVersion() );
+ }
+
private static void assertRepositoryBase( RepositoryBase childRepository, RepositoryBase repository )
{
assertNotNull( "Check repository inherited", childRepository );
@@ -590,7 +646,7 @@
{
Build childBuild = child.getBuild();
- if ( expectedPlugins != null && !expectedPlugins.isEmpty() )
+ if ( ( expectedPlugins != null ) && !expectedPlugins.isEmpty() )
{
assertNotNull( childBuild );
@@ -616,7 +672,7 @@
}
else
{
- assertTrue( childBuild == null || childBuild.getPlugins() == null || childBuild.getPlugins().isEmpty() );
+ assertTrue( ( childBuild == null ) || ( childBuild.getPlugins() == null ) || childBuild.getPlugins().isEmpty() );
}
}
@@ -628,9 +684,9 @@
List referenceExecutions = reference.getExecutions();
Map testExecutionsMap = test.getExecutionsAsMap();
- if ( referenceExecutions != null && !referenceExecutions.isEmpty() )
+ if ( ( referenceExecutions != null ) && !referenceExecutions.isEmpty() )
{
- assertTrue( "Missing goals specification", ( testExecutionsMap != null && !testExecutionsMap.isEmpty() ) );
+ assertTrue( "Missing goals specification", ( ( testExecutionsMap != null ) && !testExecutionsMap.isEmpty() ) );
for ( Iterator it = referenceExecutions.iterator(); it.hasNext(); )
{
@@ -648,7 +704,7 @@
else
{
assertTrue( "Unexpected goals specification",
- ( testExecutionsMap == null || testExecutionsMap.isEmpty() ) );
+ ( ( testExecutionsMap == null ) || testExecutionsMap.isEmpty() ) );
}
}
@@ -750,7 +806,7 @@
{
Reporting childBuild = child.getReporting();
- if ( expectedPlugins != null && !expectedPlugins.isEmpty() )
+ if ( ( expectedPlugins != null ) && !expectedPlugins.isEmpty() )
{
assertNotNull( childBuild );
@@ -776,7 +832,7 @@
}
else
{
- assertTrue( childBuild == null || childBuild.getPlugins() == null || childBuild.getPlugins().isEmpty() );
+ assertTrue( ( childBuild == null ) || ( childBuild.getPlugins() == null ) || childBuild.getPlugins().isEmpty() );
}
}
@@ -788,9 +844,9 @@
List referenceReportSets = reference.getReportSets();
Map testReportSetsMap = test.getReportSetsAsMap();
- if ( referenceReportSets != null && !referenceReportSets.isEmpty() )
+ if ( ( referenceReportSets != null ) && !referenceReportSets.isEmpty() )
{
- assertTrue( "Missing goals specification", ( testReportSetsMap != null && !testReportSetsMap.isEmpty() ) );
+ assertTrue( "Missing goals specification", ( ( testReportSetsMap != null ) && !testReportSetsMap.isEmpty() ) );
for ( Iterator it = referenceReportSets.iterator(); it.hasNext(); )
{
@@ -808,7 +864,7 @@
else
{
assertTrue( "Unexpected goals specification",
- ( testReportSetsMap == null || testReportSetsMap.isEmpty() ) );
+ ( ( testReportSetsMap == null ) || testReportSetsMap.isEmpty() ) );
}
}
@@ -851,7 +907,7 @@
{
Model model = makeBaseModel( artifactId );
- if ( connection != null || developerConnection != null || url != null )
+ if ( ( connection != null ) || ( developerConnection != null ) || ( url != null ) )
{
Scm scm = new Scm();