Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilos Kleint2011-03-21 13:01:22 +0000
committerMilos Kleint2011-03-21 13:01:22 +0000
commit11d77c64ab8b97b6d4c664f067c5cd4004986f39 (patch)
tree72b3d4dd666d31a78b3a9c5ab115a63d24ed6787 /org.eclipse.m2e.core
parent327612b3f099cd074388c0ab3f1644230e5463a9 (diff)
downloadm2e-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')
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/lifecyclemapping/discovery/LifecycleMappingConfiguration.java229
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/LocalProjectScanner.java10
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();
}
}

Back to the top