diff options
author | Milos Kleint | 2011-03-21 13:01:22 +0000 |
---|---|---|
committer | Milos Kleint | 2011-03-21 13:01:22 +0000 |
commit | 11d77c64ab8b97b6d4c664f067c5cd4004986f39 (patch) | |
tree | 72b3d4dd666d31a78b3a9c5ab115a63d24ed6787 /org.eclipse.m2e.core | |
parent | 327612b3f099cd074388c0ab3f1644230e5463a9 (diff) | |
download | m2e-core-11d77c64ab8b97b6d4c664f067c5cd4004986f39.tar.gz m2e-core-11d77c64ab8b97b6d4c664f067c5cd4004986f39.tar.xz m2e-core-11d77c64ab8b97b6d4c664f067c5cd4004986f39.zip |
338804 collect all errors during lifecycle mapping analysis and report these errors, ignore the failed projects on the lifecycle page
Diffstat (limited to 'org.eclipse.m2e.core')
2 files changed, 133 insertions, 106 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/discovery/LifecycleMappingConfiguration.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/discovery/LifecycleMappingConfiguration.java index c3d0f6e8..0d07ff3e 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/discovery/LifecycleMappingConfiguration.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/discovery/LifecycleMappingConfiguration.java @@ -23,7 +23,6 @@ import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.SubMonitor; @@ -80,6 +79,9 @@ public class LifecycleMappingConfiguration { */ private Set<MavenProjectInfo> selectedProjects; + + private Map<MavenProjectInfo, Throwable> errors = new HashMap<MavenProjectInfo, Throwable>(); + private LifecycleMappingConfiguration() { } @@ -252,12 +254,12 @@ public class LifecycleMappingConfiguration { * Eclipse plugins and m2e default lifecycle mapping metadata. */ public static LifecycleMappingConfiguration calculate(Collection<MavenProjectInfo> projects, - ProjectImportConfiguration importConfiguration, IProgressMonitor monitor) throws CoreException { - + ProjectImportConfiguration importConfiguration, IProgressMonitor monitor) { monitor.beginTask("Analysing project execution plan", projects.size()); LifecycleMappingConfiguration result = new LifecycleMappingConfiguration(); + List<MavenProjectInfo> nonErrorProjects = new ArrayList<MavenProjectInfo>(); MavenPlugin mavenPlugin = MavenPlugin.getDefault(); IMaven maven = mavenPlugin.getMaven(); @@ -265,118 +267,131 @@ public class LifecycleMappingConfiguration { if(monitor.isCanceled()) { throw new OperationCanceledException(); } - - SubMonitor subMmonitor = SubMonitor.convert(monitor, NLS.bind("Analysing {0}",projectInfo.getLabel()), 1); - - MavenExecutionRequest request = maven.createExecutionRequest(subMmonitor); - - request.setPom(projectInfo.getPomFile()); - request.addActiveProfiles(importConfiguration.getResolverConfiguration().getActiveProfileList()); - - // jdk-based profile activation - Properties systemProperties = new Properties(); - EnvironmentUtils.addEnvVars(systemProperties); - systemProperties.putAll(System.getProperties()); - request.setSystemProperties(systemProperties); - - request.setLocalRepository(maven.getLocalRepository()); - - MavenExecutionResult executionResult = maven.readProject(request, subMmonitor); - - MavenProject mavenProject = executionResult.getProject(); - - if(mavenProject != null) { - if("pom".equals(projectInfo.getModel().getPackaging())) { - // m2e uses a noop lifecycle mapping for packaging=pom + try { + SubMonitor subMmonitor = SubMonitor.convert(monitor, NLS.bind("Analysing {0}",projectInfo.getLabel()), 1); + MavenExecutionRequest request = maven.createExecutionRequest(subMmonitor); + + request.setPom(projectInfo.getPomFile()); + request.addActiveProfiles(importConfiguration.getResolverConfiguration().getActiveProfileList()); + + // jdk-based profile activation + Properties systemProperties = new Properties(); + EnvironmentUtils.addEnvVars(systemProperties); + systemProperties.putAll(System.getProperties()); + request.setSystemProperties(systemProperties); + + request.setLocalRepository(maven.getLocalRepository()); + + MavenExecutionResult executionResult = maven.readProject(request, subMmonitor); + + MavenProject mavenProject = executionResult.getProject(); + + if(monitor.isCanceled()) { + throw new OperationCanceledException(); + } + + if(mavenProject != null) { + if("pom".equals(projectInfo.getModel().getPackaging())) { + // m2e uses a noop lifecycle mapping for packaging=pom + List<MojoExecution> mojoExecutions = new ArrayList<MojoExecution>(); + PackagingTypeMappingConfiguration pkgConfiguration = new PackagingTypeMappingConfiguration( + mavenProject.getPackaging(), null /*lifecycleMappingId*/); + ProjectLifecycleMappingConfiguration configuration = new ProjectLifecycleMappingConfiguration( + projectInfo.getLabel(), mavenProject, mojoExecutions, pkgConfiguration); + result.addProject(projectInfo, configuration); + continue; + } + + MavenSession session = maven.createSession(request, mavenProject); + List<MojoExecution> mojoExecutions = new ArrayList<MojoExecution>(); + MavenExecutionPlan executionPlan = maven.calculateExecutionPlan(session, mavenProject, + Arrays.asList(ProjectRegistryManager.LIFECYCLE_CLEAN), false, subMmonitor); + mojoExecutions.addAll(executionPlan.getMojoExecutions()); + executionPlan = maven.calculateExecutionPlan(session, mavenProject, + Arrays.asList(ProjectRegistryManager.LIFECYCLE_DEFAULT), false, subMmonitor); + mojoExecutions.addAll(executionPlan.getMojoExecutions()); + executionPlan = maven.calculateExecutionPlan(session, mavenProject, + Arrays.asList(ProjectRegistryManager.LIFECYCLE_SITE), false, subMmonitor); + mojoExecutions.addAll(executionPlan.getMojoExecutions()); + + LifecycleMappingResult lifecycleResult = new LifecycleMappingResult(); + + List<MappingMetadataSource> metadataSources; + try { + metadataSources = LifecycleMappingFactory.getProjectMetadataSources(request, mavenProject, + LifecycleMappingFactory.getBundleMetadataSources(), true, monitor); + } catch(LifecycleMappingConfigurationException e) { + // could not read/parse/interpret mapping metadata configured in the pom or inherited from parent pom. + // record the problem and continue + log.error(e.getMessage(), e); + continue; + } + + LifecycleMappingFactory.calculateEffectiveLifecycleMappingMetadata(lifecycleResult, request, metadataSources, + mavenProject, mojoExecutions, false); + LifecycleMappingFactory.instantiateLifecycleMapping(lifecycleResult, mavenProject, + lifecycleResult.getLifecycleMappingId()); + LifecycleMappingFactory.instantiateProjectConfigurators(mavenProject, lifecycleResult, + lifecycleResult.getMojoExecutionMapping()); + PackagingTypeMappingConfiguration pkgConfiguration = new PackagingTypeMappingConfiguration( - mavenProject.getPackaging(), null /*lifecycleMappingId*/); + mavenProject.getPackaging(), + isProjectSource(lifecycleResult.getLifecycleMappingMetadata()) ? lifecycleResult.getLifecycleMappingId() + : null); ProjectLifecycleMappingConfiguration configuration = new ProjectLifecycleMappingConfiguration( projectInfo.getLabel(), mavenProject, mojoExecutions, pkgConfiguration); - result.addProject(projectInfo, configuration); - continue; - } - - MavenSession session = maven.createSession(request, mavenProject); - - List<MojoExecution> mojoExecutions = new ArrayList<MojoExecution>(); - MavenExecutionPlan executionPlan = maven.calculateExecutionPlan(session, mavenProject, - Arrays.asList(ProjectRegistryManager.LIFECYCLE_CLEAN), false, subMmonitor); - mojoExecutions.addAll(executionPlan.getMojoExecutions()); - executionPlan = maven.calculateExecutionPlan(session, mavenProject, - Arrays.asList(ProjectRegistryManager.LIFECYCLE_DEFAULT), false, subMmonitor); - mojoExecutions.addAll(executionPlan.getMojoExecutions()); - executionPlan = maven.calculateExecutionPlan(session, mavenProject, - Arrays.asList(ProjectRegistryManager.LIFECYCLE_SITE), false, subMmonitor); - mojoExecutions.addAll(executionPlan.getMojoExecutions()); - - LifecycleMappingResult lifecycleResult = new LifecycleMappingResult(); - - List<MappingMetadataSource> metadataSources; - try { - metadataSources = LifecycleMappingFactory.getProjectMetadataSources(request, mavenProject, - LifecycleMappingFactory.getBundleMetadataSources(), true, monitor); - } catch(LifecycleMappingConfigurationException e) { - // could not read/parse/interpret mapping metadata configured in the pom or inherited from parent pom. - // record the problem and continue - log.error(e.getMessage(), e); - continue; - } - - LifecycleMappingFactory.calculateEffectiveLifecycleMappingMetadata(lifecycleResult, request, metadataSources, - mavenProject, mojoExecutions, false); - LifecycleMappingFactory.instantiateLifecycleMapping(lifecycleResult, mavenProject, - lifecycleResult.getLifecycleMappingId()); - LifecycleMappingFactory.instantiateProjectConfigurators(mavenProject, lifecycleResult, - lifecycleResult.getMojoExecutionMapping()); - - PackagingTypeMappingConfiguration pkgConfiguration = new PackagingTypeMappingConfiguration( - mavenProject.getPackaging(), - isProjectSource(lifecycleResult.getLifecycleMappingMetadata()) ? lifecycleResult.getLifecycleMappingId() - : null); - ProjectLifecycleMappingConfiguration configuration = new ProjectLifecycleMappingConfiguration( - projectInfo.getLabel(), mavenProject, mojoExecutions, pkgConfiguration); - - if(lifecycleResult.getLifecycleMapping() != null) { - result.addInstalledProvider(configuration.getPackagingTypeMappingConfiguration() - .getLifecycleMappingRequirement()); - } - - for(Map.Entry<MojoExecutionKey, List<PluginExecutionMetadata>> entry : lifecycleResult - .getMojoExecutionMapping().entrySet()) { - MojoExecutionKey key = entry.getKey(); - List<PluginExecutionMetadata> mapppings = entry.getValue(); - PluginExecutionMetadata primaryMapping = null; - if(mapppings != null && !mapppings.isEmpty()) { - primaryMapping = mapppings.get(0); + + if(lifecycleResult.getLifecycleMapping() != null) { + result.addInstalledProvider(configuration.getPackagingTypeMappingConfiguration() + .getLifecycleMappingRequirement()); } - MojoExecutionMappingConfiguration executionConfiguration = new MojoExecutionMappingConfiguration(key, - isProjectSource(primaryMapping)? primaryMapping: null); - configuration.addMojoExecution(executionConfiguration); - if(primaryMapping != null) { - switch(primaryMapping.getAction()) { - case configurator: - AbstractProjectConfigurator projectConfigurator = lifecycleResult.getProjectConfigurators().get( - LifecycleMappingFactory.getProjectConfiguratorId(primaryMapping)); - if(projectConfigurator != null) { + + for(Map.Entry<MojoExecutionKey, List<PluginExecutionMetadata>> entry : lifecycleResult + .getMojoExecutionMapping().entrySet()) { + MojoExecutionKey key = entry.getKey(); + List<PluginExecutionMetadata> mapppings = entry.getValue(); + PluginExecutionMetadata primaryMapping = null; + if(mapppings != null && !mapppings.isEmpty()) { + primaryMapping = mapppings.get(0); + } + MojoExecutionMappingConfiguration executionConfiguration = new MojoExecutionMappingConfiguration(key, + isProjectSource(primaryMapping)? primaryMapping: null); + configuration.addMojoExecution(executionConfiguration); + if(primaryMapping != null) { + switch(primaryMapping.getAction()) { + case configurator: + AbstractProjectConfigurator projectConfigurator = lifecycleResult.getProjectConfigurators().get( + LifecycleMappingFactory.getProjectConfiguratorId(primaryMapping)); + if(projectConfigurator != null) { + result.addInstalledProvider(executionConfiguration.getLifecycleMappingRequirement()); + } + break; + case error: + case execute: + case ignore: result.addInstalledProvider(executionConfiguration.getLifecycleMappingRequirement()); - } - break; - case error: - case execute: - case ignore: - result.addInstalledProvider(executionConfiguration.getLifecycleMappingRequirement()); - break; - default: - throw new IllegalArgumentException("Missing handling for action=" + primaryMapping.getAction()); + break; + default: + throw new IllegalArgumentException("Missing handling for action=" + primaryMapping.getAction()); + } } } + result.addProject(projectInfo, configuration); + nonErrorProjects.add(projectInfo); + } else { + //XXX mkleint: what shall happen now? we don't have a valid MavenProject instance to play with, + // currently we skip such project silently, is that ok? } - result.addProject(projectInfo, configuration); + + } catch (OperationCanceledException ex) { + throw ex; + } catch (Throwable th) { + result.addError(projectInfo, th); } } - result.setSelectedProjects(projects); + result.setSelectedProjects(nonErrorProjects); return result; } @@ -427,5 +442,13 @@ public class LifecycleMappingConfiguration { public void setSelectedProjects(Collection<MavenProjectInfo> projects) { this.selectedProjects = new HashSet<MavenProjectInfo>(projects); } + + public void addError(MavenProjectInfo info, Throwable th) { + errors.put(info, th); + } + + public Map<MavenProjectInfo, Throwable> getErrors() { + return errors; + } } diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/LocalProjectScanner.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/LocalProjectScanner.java index 8b66d2dd..d0657c41 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/LocalProjectScanner.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/LocalProjectScanner.java @@ -22,7 +22,9 @@ import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.osgi.util.NLS; import org.apache.maven.model.Model; import org.apache.maven.model.Profile; @@ -56,18 +58,20 @@ public class LocalProjectScanner extends AbstractProjectScanner<MavenProjectInfo } public void run(IProgressMonitor monitor) throws InterruptedException { - monitor.beginTask(Messages.LocalProjectScanner_task_scanning, IProgressMonitor.UNKNOWN); + SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.LocalProjectScanner_task_scanning, 1); + + subMonitor.beginTask(Messages.LocalProjectScanner_task_scanning, IProgressMonitor.UNKNOWN); try { for(String folderName : folders) { try { File folder = new File(folderName).getCanonicalFile(); - scanFolder(folder, "", new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN)); + scanFolder(folder, "", new SubProgressMonitor(subMonitor, IProgressMonitor.UNKNOWN)); } catch(IOException ex) { addError(ex); } } } finally { - monitor.done(); + subMonitor.done(); } } |