001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license 003 * agreements. See the NOTICE file distributed with this work for additional information regarding 004 * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the 005 * "License"); you may not use this file except in compliance with the License. You may obtain a 006 * copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software distributed under the License 011 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 012 * or implied. See the License for the specific language governing permissions and limitations under 013 * the License. 014 */ 015 016package org.apache.maven.lifecycle.internal.stub; 017 018import org.apache.maven.execution.MavenSession; 019import org.apache.maven.lifecycle.LifecycleNotFoundException; 020import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException; 021import org.apache.maven.lifecycle.MavenExecutionPlan; 022import org.apache.maven.lifecycle.internal.ExecutionPlanItem; 023import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator; 024import org.apache.maven.lifecycle.internal.ProjectBuildList; 025import org.apache.maven.lifecycle.internal.ProjectSegment; 026import org.apache.maven.model.Plugin; 027import org.apache.maven.plugin.InvalidPluginDescriptorException; 028import org.apache.maven.plugin.MojoExecution; 029import org.apache.maven.plugin.MojoNotFoundException; 030import org.apache.maven.plugin.PluginDescriptorParsingException; 031import org.apache.maven.plugin.PluginNotFoundException; 032import org.apache.maven.plugin.PluginResolutionException; 033import org.apache.maven.plugin.descriptor.MojoDescriptor; 034import org.apache.maven.plugin.descriptor.PluginDescriptor; 035import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException; 036import org.apache.maven.plugin.version.PluginVersionResolutionException; 037import org.apache.maven.project.MavenProject; 038import org.codehaus.plexus.util.xml.Xpp3Dom; 039 040import java.util.ArrayList; 041import java.util.Arrays; 042import java.util.HashSet; 043import java.util.List; 044import java.util.Set; 045 046/** 047 * @author Kristian Rosenvold 048 */ 049public class LifecycleExecutionPlanCalculatorStub 050 implements LifecycleExecutionPlanCalculator 051{ 052 // clean 053 054 public final static MojoDescriptor PRE_CLEAN = createMojoDescriptor( "pre-clean" ); 055 056 public final static MojoDescriptor CLEAN = createMojoDescriptor( "clean" ); 057 058 public final static MojoDescriptor POST_CLEAN = createMojoDescriptor( "post-clean" ); 059 060 // default (or at least some of them) 061 062 public final static MojoDescriptor VALIDATE = createMojoDescriptor( "validate" ); 063 064 public final static MojoDescriptor INITIALIZE = createMojoDescriptor( "initialize" ); 065 066 public final static MojoDescriptor TEST_COMPILE = createMojoDescriptor( "test-compile" ); 067 068 public final static MojoDescriptor PROCESS_TEST_RESOURCES = createMojoDescriptor( "process-test-resources" ); 069 070 public final static MojoDescriptor PROCESS_RESOURCES = createMojoDescriptor( "process-resources" ); 071 072 public final static MojoDescriptor COMPILE = createMojoDescriptor( "compile", true ); 073 074 public final static MojoDescriptor TEST = createMojoDescriptor( "test" ); 075 076 public final static MojoDescriptor PACKAGE = createMojoDescriptor( "package" ); 077 078 public final static MojoDescriptor INSTALL = createMojoDescriptor( "install" ); 079 080 // site 081 082 public final static MojoDescriptor PRE_SITE = createMojoDescriptor( "pre-site" ); 083 084 public final static MojoDescriptor SITE = createMojoDescriptor( "site" ); 085 086 public final static MojoDescriptor POST_SITE = createMojoDescriptor( "post-site" ); 087 088 public final static MojoDescriptor SITE_DEPLOY = createMojoDescriptor( "site-deploy" ); 089 090 091 public int getNumberOfExceutions( ProjectBuildList projectBuildList ) 092 throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException, 093 NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException, 094 LifecyclePhaseNotFoundException, LifecycleNotFoundException 095 { 096 int result = 0; 097 for ( ProjectSegment projectBuild : projectBuildList ) 098 { 099 MavenExecutionPlan plan = calculateExecutionPlan( projectBuild.getSession(), projectBuild.getProject(), 100 projectBuild.getTaskSegment().getTasks() ); 101 result += plan.size(); 102 } 103 return result; 104 } 105 106 public void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session ) 107 throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException, 108 PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException, 109 LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException 110 { 111 // Maybe do something ? 112 } 113 114 public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks, 115 boolean setup ) 116 throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException, 117 PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException, 118 NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException 119 { 120 if ( project.equals( ProjectDependencyGraphStub.A ) ) 121 { 122 return getProjectAExceutionPlan(); 123 } 124 if ( project.equals( ProjectDependencyGraphStub.B ) ) 125 { 126 return getProjectBExecutionPlan(); 127 } 128 // The remaining are basically "for future expansion" 129 List<MojoExecution> me = new ArrayList<MojoExecution>(); 130 me.add( createMojoExecution( "resources", "default-resources", PROCESS_RESOURCES ) ); 131 me.add( createMojoExecution( "compile", "default-compile", COMPILE ) ); 132 return createExecutionPlan( project, me ); 133 } 134 135 public MavenExecutionPlan calculateExecutionPlan( MavenSession session, MavenProject project, List<Object> tasks ) 136 throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException, 137 PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException, 138 NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException 139 { 140 return calculateExecutionPlan( session, project, tasks, true ); 141 } 142 143 public void setupMojoExecution( MavenSession session, MavenProject project, MojoExecution mojoExecution ) 144 throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException, 145 MojoNotFoundException, InvalidPluginDescriptorException, NoPluginFoundForPrefixException, 146 LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException 147 { 148 } 149 150 public static MavenExecutionPlan getProjectAExceutionPlan() 151 throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException, 152 PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException, 153 NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException 154 { 155 List<MojoExecution> me = new ArrayList<MojoExecution>(); 156 me.add( createMojoExecution( "initialize", "default-initialize", INITIALIZE ) ); 157 me.add( createMojoExecution( "resources", "default-resources", PROCESS_RESOURCES ) ); 158 me.add( createMojoExecution( "compile", "default-compile", COMPILE ) ); 159 me.add( createMojoExecution( "testResources", "default-testResources", PROCESS_TEST_RESOURCES ) ); 160 me.add( createMojoExecution( "testCompile", "default-testCompile", TEST_COMPILE ) ); 161 me.add( createMojoExecution( "test", "default-test", TEST ) ); 162 me.add( createMojoExecution( "war", "default-war", PACKAGE ) ); 163 me.add( createMojoExecution( "install", "default-install", INSTALL ) ); 164 return createExecutionPlan( ProjectDependencyGraphStub.A.getExecutionProject(), me ); 165 } 166 167 public static MavenExecutionPlan getProjectBExecutionPlan() 168 throws PluginNotFoundException, PluginResolutionException, LifecyclePhaseNotFoundException, 169 PluginDescriptorParsingException, MojoNotFoundException, InvalidPluginDescriptorException, 170 NoPluginFoundForPrefixException, LifecycleNotFoundException, PluginVersionResolutionException 171 { 172 List<MojoExecution> me = new ArrayList<MojoExecution>(); 173 me.add( createMojoExecution( "enforce", "enforce-versions", VALIDATE ) ); 174 me.add( createMojoExecution( "resources", "default-resources", PROCESS_RESOURCES ) ); 175 me.add( createMojoExecution( "compile", "default-compile", COMPILE ) ); 176 me.add( createMojoExecution( "testResources", "default-testResources", PROCESS_TEST_RESOURCES ) ); 177 me.add( createMojoExecution( "testCompile", "default-testCompile", TEST_COMPILE ) ); 178 me.add( createMojoExecution( "test", "default-test", TEST ) ); 179 return createExecutionPlan( ProjectDependencyGraphStub.B.getExecutionProject(), me ); 180 } 181 182 183 private static MavenExecutionPlan createExecutionPlan( MavenProject project, List<MojoExecution> mojoExecutions ) 184 throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException, 185 NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException, 186 LifecyclePhaseNotFoundException, LifecycleNotFoundException 187 { 188 final List<ExecutionPlanItem> planItemList = 189 ExecutionPlanItem.createExecutionPlanItems( project, mojoExecutions ); 190 return new MavenExecutionPlan( planItemList, DefaultLifecyclesStub.createDefaultLifecycles() ); 191 } 192 193 private static MojoExecution createMojoExecution( String goal, String executionId, MojoDescriptor mojoDescriptor ) 194 { 195 final Plugin plugin = mojoDescriptor.getPluginDescriptor().getPlugin(); 196 MojoExecution result = new MojoExecution( plugin, goal, executionId ); 197 result.setConfiguration( new Xpp3Dom( executionId + "-" + goal ) ); 198 result.setMojoDescriptor( mojoDescriptor ); 199 result.setLifecyclePhase( mojoDescriptor.getPhase() ); 200 201 return result; 202 203 } 204 205 public static MojoDescriptor createMojoDescriptor( String phaseName ) 206 { 207 return createMojoDescriptor( phaseName, false ); 208 } 209 210 public static MojoDescriptor createMojoDescriptor( String phaseName, boolean threadSafe ) 211 { 212 final MojoDescriptor mojoDescriptor = new MojoDescriptor(); 213 mojoDescriptor.setPhase( phaseName ); 214 final PluginDescriptor descriptor = new PluginDescriptor(); 215 Plugin plugin = new Plugin(); 216 plugin.setArtifactId( "org.apache.maven.test.MavenExecutionPlan" ); 217 plugin.setGroupId( "stub-plugin-" + phaseName ); 218 descriptor.setPlugin( plugin ); 219 descriptor.setArtifactId( "artifact." + phaseName ); 220 mojoDescriptor.setPluginDescriptor( descriptor ); 221 mojoDescriptor.setThreadSafe( threadSafe ); 222 return mojoDescriptor; 223 } 224 225 226 public static Set<String> getScopes() 227 { 228 return new HashSet<String>( Arrays.asList( "compile" ) ); 229 } 230 231}