load ~/.m2/pom.xml for user overrides

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@162978 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Leslie Porter 2004-08-15 04:32:04 +00:00
parent 0f706f5102
commit 2c0b5d4ea4
3 changed files with 35 additions and 7 deletions

View File

@ -155,6 +155,7 @@ public static void main( String[] args, ClassWorld classWorld )
// Local repository
// ----------------------------------------------------------------------
/** @todo shouldn't need to duplicate the code to load maven.properties. */
private static String findLocalRepository()
throws Exception
{

View File

@ -96,6 +96,9 @@ public MavenProject build( File projectDescriptor, ArtifactRepository localRepos
return build( projectDescriptor, localRepository, false );
}
/** @todo can we move the super model reading to the initialize method? what about the user/site? Is it reused?
* @todo we should be passing in some more configuration here so that maven.home.local can be used for user properties. Then, the new stuff should be unit tested.
*/
public MavenProject build( File projectDescriptor, ArtifactRepository localRepository, boolean resolveDependencies )
throws ProjectBuildingException
{
@ -110,12 +113,36 @@ public MavenProject build( File projectDescriptor, ArtifactRepository localRepos
lineage,
superModel.getRepositories() );
modelInheritanceAssembler.assembleModelInheritance( ( (MavenProject) lineage.get( 0 ) ).getModel(), superModel );
Model previous = superModel;
for ( int i = 1; i < lineage.size(); i++ )
for ( Iterator i = lineage.iterator(); i.hasNext(); )
{
modelInheritanceAssembler.assembleModelInheritance( ( (MavenProject) lineage.get( i ) ).getModel(),
( (MavenProject) lineage.get( i - 1 ) ).getModel() );
Model current = ( (MavenProject) i.next() ).getModel();
modelInheritanceAssembler.assembleModelInheritance( current, previous );
previous = current;
}
// TODO: use maven.home.local instead of user.home/.m2
File userModelFile = new File( System.getProperty( "user.home" ) + "/.m2", "pom.xml" );
if ( userModelFile.exists() )
{
Model userModel = modelReader.read( new FileReader( userModelFile ) );
modelInheritanceAssembler.assembleModelInheritance( userModel, previous );
if ( userModel.getParent() != null )
{
throw new ProjectBuildingException( "Inheritence not supported in the user override POM" );
}
MavenProject parent = project;
project = new MavenProject( userModel );
project.setFile( parent.getFile() );
project.setParent( parent );
// Note that we don't currently support maven.properties here: this might be a better place to do
// the overrides though, if it is kept. If so, would need to process this regardless of the existence
// of pom.xml
project.setProperties( parent.getProperties() );
}
project.setArtifacts( artifactFactory.createArtifacts( project.getDependencies(), localRepository ) );
@ -167,6 +194,8 @@ public MavenProject build( File projectDescriptor, ArtifactRepository localRepos
}
}
/** @todo loading of project properties could be handled much more effeciently as they are never loaded from
the repository. However, I believe they should be removedC anyway and use the POM -- Brett. */
private MavenProject assembleLineage( File projectDescriptor,
ArtifactRepository localRepository,
LinkedList lineage,
@ -222,8 +251,6 @@ else if ( isEmpty( parentModel.getVersion() ) )
project.setProperties( properties );
project.setFile( projectDescriptor );
return project;
}

View File

@ -199,7 +199,7 @@ public void assembleModelInheritance( Model child, Model parent )
}
//Repositories :: aggreagte
// Repositories :: aggregate
List parentRepositories = parent.getRepositories();
List childRepositories = child.getRepositories();