public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles(String packaging) { if (logger.isDebugEnabled()) { logger.debug( "Looking up lifecyle mappings for packaging " + packaging + " from " + Thread.currentThread().getContextClassLoader()); } LifecycleMapping lifecycleMappingForPackaging = lifecycleMappings.get(packaging); if (lifecycleMappingForPackaging == null) { return null; } Map<Plugin, Plugin> plugins = new LinkedHashMap<>(); for (Lifecycle lifecycle : getOrderedLifecycles()) { org.apache.maven.lifecycle.mapping.Lifecycle lifecycleConfiguration = lifecycleMappingForPackaging.getLifecycles().get(lifecycle.getId()); Map<String, LifecyclePhase> phaseToGoalMapping = null; if (lifecycleConfiguration != null) { phaseToGoalMapping = lifecycleConfiguration.getPhases(); } else if (lifecycle.getDefaultPhases() != null) { phaseToGoalMapping = lifecycle.getDefaultPhases(); } if (phaseToGoalMapping != null) { for (Map.Entry<String, LifecyclePhase> goalsForLifecyclePhase : phaseToGoalMapping.entrySet()) { String phase = goalsForLifecyclePhase.getKey(); LifecyclePhase goals = goalsForLifecyclePhase.getValue(); if (goals != null) { parseLifecyclePhaseDefinitions(plugins, phase, goals); } } } } return plugins.keySet(); }
public Map<String, List<MojoExecution>> calculateLifecycleMappings( MavenSession session, MavenProject project, Lifecycle lifecycle, String lifecyclePhase) throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException { /* * Initialize mapping from lifecycle phase to bound mojos. The key set of this map denotes the phases the caller * is interested in, i.e. all phases up to and including the specified phase. */ Map<String, Map<Integer, List<MojoExecution>>> mappings = new LinkedHashMap<String, Map<Integer, List<MojoExecution>>>(); for (String phase : lifecycle.getPhases()) { Map<Integer, List<MojoExecution>> phaseBindings = new TreeMap<Integer, List<MojoExecution>>(); mappings.put(phase, phaseBindings); if (phase.equals(lifecyclePhase)) { break; } } /* * Grab plugin executions that are bound to the selected lifecycle phases from project. The effective model of * the project already contains the plugin executions induced by the project's packaging type. Remember, all * phases of interest and only those are in the lifecyle mapping, if a phase has no value in the map, we are not * interested in any of the executions bound to it. */ for (Plugin plugin : project.getBuild().getPlugins()) { for (PluginExecution execution : plugin.getExecutions()) { // if the phase is specified then I don't have to go fetch the plugin yet and pull it down // to examine the phase it is associated to. if (execution.getPhase() != null) { Map<Integer, List<MojoExecution>> phaseBindings = mappings.get(execution.getPhase()); if (phaseBindings != null) { for (String goal : execution.getGoals()) { MojoExecution mojoExecution = new MojoExecution(plugin, goal, execution.getId()); mojoExecution.setLifecyclePhase(execution.getPhase()); addMojoExecution(phaseBindings, mojoExecution, execution.getPriority()); } } } // if not then i need to grab the mojo descriptor and look at the phase that is specified else { for (String goal : execution.getGoals()) { MojoDescriptor mojoDescriptor = pluginManager.getMojoDescriptor( plugin, goal, project.getRemotePluginRepositories(), session.getRepositorySession()); Map<Integer, List<MojoExecution>> phaseBindings = mappings.get(mojoDescriptor.getPhase()); if (phaseBindings != null) { MojoExecution mojoExecution = new MojoExecution(mojoDescriptor, execution.getId()); mojoExecution.setLifecyclePhase(mojoDescriptor.getPhase()); addMojoExecution(phaseBindings, mojoExecution, execution.getPriority()); } } } } } Map<String, List<MojoExecution>> lifecycleMappings = new LinkedHashMap<String, List<MojoExecution>>(); for (Map.Entry<String, Map<Integer, List<MojoExecution>>> entry : mappings.entrySet()) { List<MojoExecution> mojoExecutions = new ArrayList<MojoExecution>(); for (List<MojoExecution> executions : entry.getValue().values()) { mojoExecutions.addAll(executions); } lifecycleMappings.put(entry.getKey(), mojoExecutions); } return lifecycleMappings; }