docs: public static void execute(CopyResourcesMojo copyResourcesMojo,
  			Resource resource, File outputDirectory)
  			throws ResourceExecutionException {
  
  		copyResourcesMojo.getLog().debug("Execute resource : " + resource);
  		// choose a location to checkout project
  		File workspacePlugin = PathUtils.getWorkspace(copyResourcesMojo);
  		// security
  		if (workspacePlugin.exists()) {
  			copyResourcesMojo.getLog().debug(
  					"delete workspacePlugin resource because already exist : '"
  							+ workspacePlugin.getAbsolutePath() + "'");
  			if (workspacePlugin.delete()) {
  				copyResourcesMojo.getLog().debug(
  						"Unable to delete workspace plugin directory '"
  								+ workspacePlugin + "'");
  			}
  		}
  		// find correct strategy
  		ProtocolStrategy strategy;
  		try {
  			strategy = ProtocolService.getStrategy(resource);
  			copyResourcesMojo.getLog().debug(
  					"current strategy is "
  							+ strategy.getClass().getSimpleName());
  		} catch (ProtocolException e) {
  			throw new ResourceExecutionException(
  					"Protocol implementation not found", e);
  		}
  		// strategy return a source folder
  		String sourceFolder = strategy.getSourceFolder(resource,
  				copyResourcesMojo, workspacePlugin);
  		// source folder is copied into destination
  		try {
  			boolean flatten = resource.getFlatten() == null ? false : resource
  					.getFlatten();
  			FileService.copyFilesIntoOutputDirectory(copyResourcesMojo,
  					new File(sourceFolder), outputDirectory, resource, flatten);
  		} catch (FileNotFoundException e) {
  			throw new ResourceExecutionException(e);
  		} catch (InvalidSourceException e) {
  			throw new ResourceExecutionException(e);
  		} catch (IOException e) {
  			throw new ResourceExecutionException(e);
  		}
  	}