mirror of https://github.com/apache/maven.git
Fixing plugins-as-extensions when brought in from pluginManagement to a module-project's build. Unit test included.
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@601013 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
1db3b755ab
commit
103a85a02b
|
@ -144,6 +144,21 @@ public class DefaultBuildExtensionScanner
|
|||
|
||||
String key = createKey( model );
|
||||
|
||||
if ( inheritedInterpolationValues == null )
|
||||
{
|
||||
inheritedInterpolationValues = new HashMap();
|
||||
}
|
||||
|
||||
model = modelInterpolator.interpolate( model, inheritedInterpolationValues, false );
|
||||
|
||||
grabManagedPluginsWithExtensionsFlagTurnedOn( model, managedPluginsWithExtensionsFlag );
|
||||
|
||||
Properties modelProps = model.getProperties();
|
||||
if ( modelProps != null )
|
||||
{
|
||||
inheritedInterpolationValues.putAll( modelProps );
|
||||
}
|
||||
|
||||
if ( visitedModelIds.contains( key ) )
|
||||
{
|
||||
getLogger().debug( "Already visited: " + key + "; continuing." );
|
||||
|
@ -156,15 +171,6 @@ public class DefaultBuildExtensionScanner
|
|||
"Checking: " + model.getId() + " for extensions. (It has "
|
||||
+ model.getModules().size() + " modules.)" );
|
||||
|
||||
if ( inheritedInterpolationValues == null )
|
||||
{
|
||||
inheritedInterpolationValues = new HashMap();
|
||||
}
|
||||
|
||||
model = modelInterpolator.interpolate( model, inheritedInterpolationValues, false );
|
||||
|
||||
grabManagedPluginsWithExtensionsFlagTurnedOn( model, managedPluginsWithExtensionsFlag );
|
||||
|
||||
checkModelBuildForExtensions( model, request, inheritedRemoteRepositories, managedPluginsWithExtensionsFlag );
|
||||
|
||||
if ( !reactorFiles.contains( modelPom ) )
|
||||
|
@ -182,12 +188,6 @@ public class DefaultBuildExtensionScanner
|
|||
visitedModelIds,
|
||||
reactorFiles );
|
||||
}
|
||||
|
||||
Properties modelProps = model.getProperties();
|
||||
if ( modelProps != null )
|
||||
{
|
||||
inheritedInterpolationValues.putAll( modelProps );
|
||||
}
|
||||
}
|
||||
}
|
||||
catch ( ModelInterpolationException e )
|
||||
|
|
|
@ -16,12 +16,14 @@ import org.apache.maven.project.build.model.ModelLineageBuilder;
|
|||
import org.apache.maven.project.interpolation.ModelInterpolationException;
|
||||
import org.apache.maven.project.interpolation.ModelInterpolator;
|
||||
import org.apache.maven.shared.tools.easymock.MockManager;
|
||||
import org.apache.maven.shared.tools.easymock.TestFileManager;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
import org.codehaus.plexus.logging.console.ConsoleLogger;
|
||||
import org.easymock.ArgumentsMatcher;
|
||||
import org.easymock.MockControl;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
@ -32,6 +34,8 @@ public class DefaultBuildExtensionScannerTest
|
|||
|
||||
private MockManager mockManager;
|
||||
|
||||
private TestFileManager fileManager;
|
||||
|
||||
private MockControl extensionManagerCtl;
|
||||
|
||||
private ExtensionManager extensionManager;
|
||||
|
@ -54,6 +58,7 @@ public class DefaultBuildExtensionScannerTest
|
|||
super.setUp();
|
||||
|
||||
mockManager = new MockManager();
|
||||
fileManager = new TestFileManager( "DefaultBuildExtensionScannerTest", "" );
|
||||
|
||||
extensionManagerCtl = MockControl.createControl( ExtensionManager.class );
|
||||
mockManager.add( extensionManagerCtl );
|
||||
|
@ -72,6 +77,14 @@ public class DefaultBuildExtensionScannerTest
|
|||
modelInterpolator = (ModelInterpolator) modelInterpolatorCtl.getMock();
|
||||
}
|
||||
|
||||
public void tearDown()
|
||||
throws Exception
|
||||
{
|
||||
fileManager.cleanUp();
|
||||
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
public void testIncludePluginWhenExtensionsFlagDirectlySet()
|
||||
throws ExtensionScanningException, ProjectBuildingException, ModelInterpolationException,
|
||||
ExtensionManagerException
|
||||
|
@ -100,20 +113,20 @@ public class DefaultBuildExtensionScannerTest
|
|||
|
||||
modelLineageBuilder.buildModelLineage( pomFile, null, null, null, false, true );
|
||||
modelLineageBuilderCtl.setMatcher( MockControl.ALWAYS_MATCHER );
|
||||
modelLineageBuilderCtl.setReturnValue( ml );
|
||||
modelLineageBuilderCtl.setReturnValue( ml, MockControl.ZERO_OR_MORE );
|
||||
|
||||
modelInterpolator.interpolate( model, null, false );
|
||||
modelInterpolatorCtl.setMatcher( MockControl.ALWAYS_MATCHER );
|
||||
modelInterpolatorCtl.setReturnValue( model );
|
||||
modelInterpolatorCtl.setReturnValue( model, MockControl.ZERO_OR_MORE );
|
||||
|
||||
extensionManager.addPluginAsExtension( plugin, model, Collections.EMPTY_LIST, request );
|
||||
extensionManagerCtl.setVoidCallable();
|
||||
extensionManagerCtl.setVoidCallable( 1 );
|
||||
|
||||
MavenProject superProject = new MavenProject( new Model() );
|
||||
superProject.setRemoteArtifactRepositories( Collections.EMPTY_LIST );
|
||||
|
||||
projectBuilder.buildStandaloneSuperProject();
|
||||
projectBuilderCtl.setReturnValue( superProject );
|
||||
projectBuilderCtl.setReturnValue( superProject, MockControl.ZERO_OR_MORE );
|
||||
|
||||
mockManager.replayAll();
|
||||
|
||||
|
@ -176,34 +189,23 @@ public class DefaultBuildExtensionScannerTest
|
|||
|
||||
modelLineageBuilder.buildModelLineage( pomFile, null, null, null, false, true );
|
||||
modelLineageBuilderCtl.setMatcher( MockControl.ALWAYS_MATCHER );
|
||||
modelLineageBuilderCtl.setReturnValue( ml );
|
||||
modelLineageBuilderCtl.setReturnValue( ml, MockControl.ZERO_OR_MORE );
|
||||
|
||||
modelInterpolator.interpolate( model, null, false );
|
||||
modelInterpolatorCtl.setMatcher( new ArgumentsMatcher(){
|
||||
public boolean matches( Object[] expected,
|
||||
Object[] actual )
|
||||
{
|
||||
return expected[0].equals( actual[0] );
|
||||
}
|
||||
|
||||
public String toString( Object[] arguments )
|
||||
{
|
||||
return "matcher for: " + ((Model) arguments[0]).getId();
|
||||
}
|
||||
} );
|
||||
modelInterpolatorCtl.setReturnValue( model, 1 );
|
||||
modelInterpolatorCtl.setMatcher( new FirstArgFileMatcher() );
|
||||
modelInterpolatorCtl.setReturnValue( model, MockControl.ZERO_OR_MORE);
|
||||
|
||||
modelInterpolator.interpolate( parentModel, null, false );
|
||||
modelInterpolatorCtl.setReturnValue( parentModel, 1 );
|
||||
modelInterpolatorCtl.setReturnValue( parentModel, MockControl.ZERO_OR_MORE );
|
||||
|
||||
extensionManager.addPluginAsExtension( plugin, model, Collections.EMPTY_LIST, request );
|
||||
extensionManagerCtl.setVoidCallable();
|
||||
extensionManagerCtl.setVoidCallable( 1 );
|
||||
|
||||
MavenProject superProject = new MavenProject( new Model() );
|
||||
superProject.setRemoteArtifactRepositories( Collections.EMPTY_LIST );
|
||||
|
||||
projectBuilder.buildStandaloneSuperProject();
|
||||
projectBuilderCtl.setReturnValue( superProject );
|
||||
projectBuilderCtl.setReturnValue( superProject, MockControl.ZERO_OR_MORE );
|
||||
|
||||
mockManager.replayAll();
|
||||
|
||||
|
@ -214,4 +216,145 @@ public class DefaultBuildExtensionScannerTest
|
|||
|
||||
mockManager.verifyAll();
|
||||
}
|
||||
|
||||
public void testIncludePluginWithExtensionsFlagDeclaredInParentPluginManagementReferencedFromModule()
|
||||
throws ModelInterpolationException, ProjectBuildingException, ExtensionManagerException,
|
||||
ExtensionScanningException, IOException
|
||||
{
|
||||
MavenExecutionRequest request = new DefaultMavenExecutionRequest();
|
||||
File projectDir = fileManager.createTempDir();
|
||||
File pomFile = fileManager.createFile( projectDir, "pom.xml", "Placeholder file." ).getCanonicalFile();
|
||||
File modulePomFile = fileManager.createFile( projectDir,
|
||||
"module/pom.xml",
|
||||
"Placeholder file." ).getCanonicalFile();
|
||||
|
||||
Model model = new Model();
|
||||
|
||||
model.setGroupId( "group" );
|
||||
model.setArtifactId( "artifact" );
|
||||
model.setVersion( "1" );
|
||||
|
||||
Parent parent = new Parent();
|
||||
parent.setGroupId( "group" );
|
||||
parent.setArtifactId( "parent" );
|
||||
parent.setVersion( "1" );
|
||||
model.setParent( parent );
|
||||
|
||||
Model parentModel = new Model();
|
||||
parentModel.setGroupId( "group" );
|
||||
parentModel.setArtifactId( "parent" );
|
||||
parentModel.setVersion( "1" );
|
||||
|
||||
Build parentBuild = new Build();
|
||||
parentModel.setBuild( parentBuild );
|
||||
|
||||
PluginManagement pMgmt = new PluginManagement();
|
||||
parentBuild.setPluginManagement( pMgmt );
|
||||
|
||||
Plugin parentPlugin = new Plugin();
|
||||
|
||||
pMgmt.addPlugin( parentPlugin );
|
||||
|
||||
parentPlugin.setGroupId( "test" );
|
||||
parentPlugin.setArtifactId( "artifact" );
|
||||
parentPlugin.setExtensions( true );
|
||||
|
||||
Model module = new Model();
|
||||
module.setGroupId( "group" );
|
||||
module.setArtifactId( "module" );
|
||||
module.setVersion( "1" );
|
||||
|
||||
Parent moduleParent = new Parent();
|
||||
moduleParent.setGroupId( model.getGroupId() );
|
||||
moduleParent.setArtifactId( model.getArtifactId() );
|
||||
moduleParent.setVersion( model.getVersion() );
|
||||
|
||||
module.setParent( moduleParent );
|
||||
|
||||
Build build = new Build();
|
||||
module.setBuild( build );
|
||||
|
||||
Plugin plugin = new Plugin();
|
||||
|
||||
build.addPlugin( plugin );
|
||||
|
||||
plugin.setGroupId( "test" );
|
||||
plugin.setArtifactId( "artifact" );
|
||||
|
||||
model.addModule( "module" );
|
||||
|
||||
ModelLineage ml = new DefaultModelLineage();
|
||||
ml.setOrigin( model, pomFile, Collections.EMPTY_LIST, true );
|
||||
ml.addParent( parentModel, pomFile, Collections.EMPTY_LIST, false );
|
||||
|
||||
ModelLineage moduleMl = new DefaultModelLineage();
|
||||
moduleMl.setOrigin( module, modulePomFile, Collections.EMPTY_LIST, true );
|
||||
moduleMl.addParent( model, pomFile, Collections.EMPTY_LIST, true );
|
||||
moduleMl.addParent( parentModel, pomFile, Collections.EMPTY_LIST, false );
|
||||
|
||||
modelLineageBuilder.buildModelLineage( pomFile, null, null, null, false, true );
|
||||
modelLineageBuilderCtl.setMatcher( new FirstArgFileMatcher() );
|
||||
modelLineageBuilderCtl.setReturnValue( ml, MockControl.ZERO_OR_MORE );
|
||||
|
||||
modelLineageBuilder.buildModelLineage( modulePomFile, null, null, null, false, true );
|
||||
modelLineageBuilderCtl.setReturnValue( moduleMl, MockControl.ZERO_OR_MORE );
|
||||
|
||||
modelInterpolator.interpolate( model, null, false );
|
||||
modelInterpolatorCtl.setMatcher( new FirstArgModelIdMatcher() );
|
||||
modelInterpolatorCtl.setReturnValue( model, MockControl.ZERO_OR_MORE );
|
||||
|
||||
modelInterpolator.interpolate( parentModel, null, false );
|
||||
modelInterpolatorCtl.setReturnValue( parentModel, MockControl.ZERO_OR_MORE );
|
||||
|
||||
modelInterpolator.interpolate( module, null, false );
|
||||
modelInterpolatorCtl.setReturnValue( module, MockControl.ZERO_OR_MORE );
|
||||
|
||||
extensionManager.addPluginAsExtension( plugin, module, Collections.EMPTY_LIST, request );
|
||||
extensionManagerCtl.setVoidCallable( 1 );
|
||||
|
||||
MavenProject superProject = new MavenProject( new Model() );
|
||||
superProject.setRemoteArtifactRepositories( Collections.EMPTY_LIST );
|
||||
|
||||
projectBuilder.buildStandaloneSuperProject();
|
||||
projectBuilderCtl.setReturnValue( superProject, MockControl.ZERO_OR_MORE );
|
||||
|
||||
mockManager.replayAll();
|
||||
|
||||
new DefaultBuildExtensionScanner( extensionManager, projectBuilder, modelLineageBuilder,
|
||||
modelInterpolator, new ConsoleLogger( Logger.LEVEL_DEBUG,
|
||||
"test" ) ).scanForBuildExtensions( pomFile,
|
||||
request );
|
||||
|
||||
mockManager.verifyAll();
|
||||
}
|
||||
|
||||
private static final class FirstArgFileMatcher
|
||||
implements ArgumentsMatcher
|
||||
{
|
||||
public boolean matches( Object[] expected,
|
||||
Object[] actual )
|
||||
{
|
||||
return expected[0].equals( actual[0] );
|
||||
}
|
||||
|
||||
public String toString( Object[] arguments )
|
||||
{
|
||||
return "matcher for file: " + arguments[0];
|
||||
}
|
||||
}
|
||||
|
||||
private static final class FirstArgModelIdMatcher
|
||||
implements ArgumentsMatcher
|
||||
{
|
||||
public boolean matches( Object[] expected,
|
||||
Object[] actual )
|
||||
{
|
||||
return ((Model)expected[0]).getId().equals( ((Model)actual[0]).getId() );
|
||||
}
|
||||
|
||||
public String toString( Object[] arguments )
|
||||
{
|
||||
return "matcher for: " + ( (Model) arguments[0] ).getId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue