Index: extensions/maven2/src/test/java/org/codehaus/cargo/maven2/ContainerStartMojoTest.java =================================================================== --- extensions/maven2/src/test/java/org/codehaus/cargo/maven2/ContainerStartMojoTest.java (revision 1273) +++ extensions/maven2/src/test/java/org/codehaus/cargo/maven2/ContainerStartMojoTest.java (working copy) @@ -20,6 +20,8 @@ package org.codehaus.cargo.maven2; import java.util.HashSet; +import java.util.HashMap; +import java.util.Iterator; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.logging.Log; @@ -84,6 +86,28 @@ assertEquals(0, localContainer.getConfiguration().getDeployables().size()); } + public void testTwoExecutionsInProject() throws Exception + { + HashMap context = new HashMap(); + setUpMojo(InstalledLocalContainerStub.class, InstalledLocalContainerStub.ID, + StandaloneLocalConfigurationStub.class); + this.mojo.setPluginContext(context); + this.mojo.setCargoProject(createTestCargoProject("pom")); + + this.mojo.getConfigurationElement().setHome("foo"); + this.mojo.execute(); + + this.mojo.getConfigurationElement().setHome("bar"); + this.mojo.execute(); + + assertEquals(2, context.size()); + Iterator iter = context.values().iterator(); + org.codehaus.cargo.container.Container container1 = (org.codehaus.cargo.container.Container) iter.next(); + org.codehaus.cargo.container.Container container2 = (org.codehaus.cargo.container.Container) iter.next(); + // can't work out which container is which, so we just check they're different + assertFalse("containers should be different", container1.equals(container2)); + } + /** * Provide a test CargoProject in lieu of the one that is normally generated from the * MavenProject at runtime. Index: extensions/maven2/src/main/java/org/codehaus/cargo/maven2/AbstractCargoMojo.java =================================================================== --- extensions/maven2/src/main/java/org/codehaus/cargo/maven2/AbstractCargoMojo.java (revision 1273) +++ extensions/maven2/src/main/java/org/codehaus/cargo/maven2/AbstractCargoMojo.java (working copy) @@ -310,9 +310,12 @@ // Try to find the container in the Maven Plugin Context first. Map context = getPluginContext(); + + // Containers don't have any useful ID, so we use the home directory which is hopefully unique + String containerKey = CONTEXT_KEY_CONTAINER + "." + getConfigurationElement().getHome(); if (context != null) { - container = (org.codehaus.cargo.container.Container) context.get(CONTEXT_KEY_CONTAINER); + container = (org.codehaus.cargo.container.Container) context.get(containerKey); } if (container == null) @@ -322,7 +325,7 @@ if (context != null) { - context.put(CONTEXT_KEY_CONTAINER, container); + context.put(containerKey, container); } return container;