o Restored isolation of model in forked lifecycle

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@749738 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Benjamin Bentmann 2009-03-03 20:39:51 +00:00
parent c151f2925f
commit 3e7be3ad1f
1 changed files with 25 additions and 1 deletions

View File

@ -17,6 +17,8 @@ package org.apache.maven.project;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
@ -64,6 +66,7 @@ import org.apache.maven.model.Reporting;
import org.apache.maven.model.Repository;
import org.apache.maven.model.Resource;
import org.apache.maven.model.Scm;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.apache.maven.project.artifact.ActiveProjectArtifact;
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
@ -2041,7 +2044,28 @@ public class MavenProject
setScriptSourceRoots( ( new ArrayList<String>( project.getScriptSourceRoots() ) ) );
}
setModel( project.getModel() );
/*
* TODO: This is temporary solution for the failure of IT mng-0471. When StartForkedExecutionMojo clones the
* project it really needs a deep copy of the model to make sure manipulations to the project/model during the
* forked execution don't pollute the main execution. It's not clear to me right now whether manipulations to
* the model itself should just be prohibited (say be means of UnsupportedOperationExceptions) and only have the
* project be mutable. If we allow model updates like in 2.x, the code below should better be replaced with the
* original cloning code from ModelUtils.
*/
if ( project.getModel() != null )
{
try
{
StringWriter modelWriter = new StringWriter( 1024 * 10 );
project.writeModel( modelWriter );
MavenXpp3Reader parser = new MavenXpp3Reader();
setModel( parser.read( new StringReader( modelWriter.toString() ) ) );
}
catch ( Exception e )
{
throw new IllegalStateException( "in-memory cloning failed", e );
}
}
if ( project.getOriginalModel() != null )
{