Index: src/java/org/apache/maven/jelly/MavenJellyContext.java =================================================================== --- src/java/org/apache/maven/jelly/MavenJellyContext.java (revision 170616) +++ src/java/org/apache/maven/jelly/MavenJellyContext.java (working copy) @@ -17,6 +17,8 @@ * ==================================================================== */ +import com.werken.werkz.Goal; +import com.werken.werkz.Session; import com.werken.werkz.WerkzProject; import org.apache.commons.grant.GrantProject; @@ -36,6 +38,7 @@ import java.io.File; import java.net.URL; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -52,7 +55,7 @@ * @author bob mcwhirter * @author Jason van Zyl * - * @version $Id: MavenJellyContext.java,v 1.35.4.11 2004/07/01 12:39:05 brett Exp $ + * @version $Id$ */ public class MavenJellyContext extends JellyContext @@ -712,5 +715,18 @@ setVariable( var, f.getAbsolutePath() ); } } + + + private HashMap attainedGoals = new HashMap(); + + public synchronized Session attainedAt(Goal goal) { + return (Session) (this.attainedGoals.containsKey(goal) ? + this.attainedGoals.get(goal) : null); + } + + public synchronized void setAttained(Goal goal, Session session) { + this.attainedGoals.put(goal, session); + } + } Index: src/java/org/apache/maven/jelly/tags/werkz/MavenGoalTag.java =================================================================== --- src/java/org/apache/maven/jelly/tags/werkz/MavenGoalTag.java (revision 170616) +++ src/java/org/apache/maven/jelly/tags/werkz/MavenGoalTag.java (working copy) @@ -25,6 +25,8 @@ import org.apache.commons.jelly.JellyTagException; import org.apache.commons.jelly.XMLOutput; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.maven.MavenConstants; import org.apache.maven.jelly.MavenJellyContext; import org.apache.maven.plugin.JellyScriptHousing; @@ -37,13 +39,15 @@ * they are being run in the order whereby the first definition wins. * * @author Brett Porter - * @version $Id: MavenGoalTag.java,v 1.2.4.12 2004/06/26 14:52:05 dion Exp $ + * @version $Id$ */ public class MavenGoalTag extends GoalTag { // ------------------------------------------------------------ // C O N S T R U C T O R S // ------------------------------------------------------------ + + protected final Log logger = LogFactory.getLog(getClass()); /** * Construct. @@ -68,7 +72,7 @@ super.doTag( output ); goal = getProject().getGoal( getName() ); JellyScriptHousing currentHousing = ( JellyScriptHousing ) getContext().getVariable( PluginManager.PLUGIN_HOUSING ); - goal.setAction( new MavenGoalAction( currentHousing ) ); + goal.setAction( new MavenGoalAction( currentHousing, goal ) ); } } @@ -85,11 +89,13 @@ public class MavenGoalAction implements Action { private final JellyScriptHousing housing; + private final Goal goal; - public MavenGoalAction( JellyScriptHousing housing ) + public MavenGoalAction( JellyScriptHousing housing, Goal goal ) { super(); this.housing = housing; + this.goal = goal; if ( housing == null ) { throw new NullPointerException( "Plugin Housing can not be null" ); @@ -99,7 +105,13 @@ public void performAction( Session session ) throws Exception { MavenJellyContext oldContext = ( MavenJellyContext ) getContext(); - + Session attainedAt = oldContext.attainedAt(this.goal); + if ( attainedAt != null ) { + logger.info("Skipping goal " + getName() + " as it was already run in this context!" ); + logger.debug("Context = " + oldContext + ", session that ran it=" + attainedAt + ", this session = " + session ); + return; + } + oldContext.setAttained( this.goal, session ); //GoalToJellyScriptHousingMapper mapper = ( GoalToJellyScriptHousingMapper ) session.getAttribute( //PluginManager.GOAL_MAPPER ); //JellyScriptHousing housing = mapper.getPluginHousing( getName() ); Index: src/java/org/apache/maven/jelly/tags/werkz/MavenAttainGoalTag.java =================================================================== --- src/java/org/apache/maven/jelly/tags/werkz/MavenAttainGoalTag.java (revision 170616) +++ src/java/org/apache/maven/jelly/tags/werkz/MavenAttainGoalTag.java (working copy) @@ -39,7 +39,7 @@ * Replacement for werkz's AttainGoalTag which will lazy initialise goals. * * @author Brett Porter - * @version $Id: MavenAttainGoalTag.java,v 1.2.2.10 2004/11/06 05:51:16 brett Exp $ + * @version $Id$ */ public class MavenAttainGoalTag extends WerkzTagSupport { @@ -114,7 +114,6 @@ GoalToJellyScriptHousingMapper mapper = ( GoalToJellyScriptHousingMapper ) getSession().getAttribute( PluginManager.GOAL_MAPPER ); PluginManager pluginManager = ( PluginManager ) getSession().getAttribute( PluginManager.PLUGIN_MANAGER ); - Set pluginSet; try {