Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason van Zyl2013-05-12 16:05:26 +0000
committerJason van Zyl2013-05-12 16:05:26 +0000
commit9a9db64704687ac601d54626dd84db5a2d387bfc (patch)
tree67c7c157d545a5e94e03985ec15612355f3fc2d9 /org.eclipse.m2e.core
parent784ec22a9361bef020777cb8c11433b31c027bc2 (diff)
parent6677bc514714d2a7a6a10f572ba8b949636f7e21 (diff)
downloadm2e-core-9a9db64704687ac601d54626dd84db5a2d387bfc.tar.gz
m2e-core-9a9db64704687ac601d54626dd84db5a2d387bfc.tar.xz
m2e-core-9a9db64704687ac601d54626dd84db5a2d387bfc.zip
Merge branch 'master' into runtime
Diffstat (limited to 'org.eclipse.m2e.core')
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/IMavenConstants.java5
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java13
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenExternalRuntime.java9
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/markers/ArtifactNotFoundProblemInfo.java19
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/ProjectConfigurationManager.java45
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/WorkspaceStateWriter.java50
6 files changed, 113 insertions, 28 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/IMavenConstants.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/IMavenConstants.java
index 8c417d89..4591b921 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/IMavenConstants.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/IMavenConstants.java
@@ -89,6 +89,11 @@ public interface IMavenConstants {
public static final String MARKER_ATTR_VERSION = "version";//$NON-NLS-1$
+ /**
+ * @since 1.4.0
+ */
+ public static final String MARKER_ATTR_CLASSIFIER = "classifier";//$NON-NLS-1$
+
public static final String EDITOR_HINT_PARENT_GROUP_ID = "parent_groupid";//$NON-NLS-1$
public static final String EDITOR_HINT_PARENT_VERSION = "parent_version";//$NON-NLS-1$
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java
index 9faf9596..6562d046 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/builder/MavenBuilder.java
@@ -197,11 +197,22 @@ public class MavenBuilder extends IncrementalProjectBuilder implements DeltaProv
/*package*/IMavenProjectFacade getProjectFacade(final IFile pomResource, final IProject project,
final IProgressMonitor monitor) throws CoreException {
+
+ // facade refresh should be forced whenever pom.xml has changed
+ // there is no delta info for full builds
+ // but these are usually forced from Project/Clean
+ // so assume pom did not change
+ boolean force = false;
+
IResourceDelta delta = getDelta(project);
+ if(delta != null) {
+ delta = delta.findMember(pomResource.getFullPath());
+ force = delta != null && delta.getKind() == IResourceDelta.CHANGED;
+ }
IMavenProjectFacade projectFacade = projectManager.create(getProject(), monitor);
- if(delta == null || projectFacade == null || projectFacade.isStale()) {
+ if(force || projectFacade == null || projectFacade.isStale()) {
projectManager.refresh(Collections.singleton(pomResource), monitor);
projectFacade = projectManager.create(project, monitor);
if(projectFacade == null) {
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenExternalRuntime.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenExternalRuntime.java
index 3603d7fb..e539678f 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenExternalRuntime.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenExternalRuntime.java
@@ -74,9 +74,14 @@ public class MavenExternalRuntime implements MavenRuntime {
}
private File getLauncherConfigurationFile() {
- return new File(location, "bin/m2.conf"); //$NON-NLS-1$
+ File m2Conf = new File(location, "bin/m2.conf");
+ // Look for Tesla location
+ if(m2Conf.exists() == false) {
+ m2Conf = new File(location, "conf/m2.conf");
+ }
+ return m2Conf; //$NON-NLS-1$
}
-
+
public void createLauncherConfiguration(final IMavenLauncherConfiguration collector, IProgressMonitor monitor)
throws CoreException {
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/markers/ArtifactNotFoundProblemInfo.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/markers/ArtifactNotFoundProblemInfo.java
index 130d79ce..243c31aa 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/markers/ArtifactNotFoundProblemInfo.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/markers/ArtifactNotFoundProblemInfo.java
@@ -11,10 +11,14 @@
package org.eclipse.m2e.core.internal.markers;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.osgi.util.NLS;
import org.sonatype.aether.artifact.Artifact;
+import org.eclipse.m2e.core.internal.IMavenConstants;
+
public class ArtifactNotFoundProblemInfo extends MavenProblemInfo {
private final Artifact artifact;
@@ -35,4 +39,19 @@ public class ArtifactNotFoundProblemInfo extends MavenProblemInfo {
public Artifact getArtifact() {
return this.artifact;
}
+
+ /**
+ * Adds the missing artifact groupId, artifactId, version and classifier as marker attributes.
+ *
+ * @since 1.4.0
+ */
+ public void processMarker(IMarker marker) throws CoreException {
+ super.processMarker(marker);
+ if(artifact != null) {
+ marker.setAttribute(IMavenConstants.MARKER_ATTR_GROUP_ID, artifact.getGroupId());
+ marker.setAttribute(IMavenConstants.MARKER_ATTR_ARTIFACT_ID, artifact.getArtifactId());
+ marker.setAttribute(IMavenConstants.MARKER_ATTR_VERSION, artifact.getVersion());
+ marker.setAttribute(IMavenConstants.MARKER_ATTR_CLASSIFIER, artifact.getClassifier());
+ }
+ }
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/ProjectConfigurationManager.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/ProjectConfigurationManager.java
index 2ee5e1ff..3d44b409 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/ProjectConfigurationManager.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/ProjectConfigurationManager.java
@@ -340,31 +340,46 @@ public class ProjectConfigurationManager implements IProjectConfigurationManager
//project names to the errors encountered when updating them
Map<String, IStatus> updateStatus = new HashMap<String, IStatus>();
- // refresh projects and update all dependencies
- // this will ensure that project registry is up-to-date on GAV of all projects being updated
- // TODO this sends multiple update events, rework using low-level registry update methods
- for(IFile pom : pomFiles) {
- if(monitor.isCanceled()) {
- throw new OperationCanceledException();
- }
-
- IProject project = pom.getProject();
+ List<IFile> pomsToRefresh = new ArrayList<IFile>();
- monitor.subTask(project.getName());
+ // refresh from local filesystem
+ if(refreshFromLocal) {
+ for(IFile pom : pomFiles) {
+ if(monitor.isCanceled()) {
+ throw new OperationCanceledException();
+ }
- try {
- if(refreshFromLocal) {
+ IProject project = pom.getProject();
+ try {
project.refreshLocal(IResource.DEPTH_INFINITE, new SubProgressMonitor(monitor, 1,
SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
+ pomsToRefresh.add(pom);
+ } catch(CoreException ex) {
+ updateStatus.put(project.getName(), ex.getStatus());
}
- projectManager.refresh(Collections.singleton(pom), new SubProgressMonitor(monitor, 1,
- SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
+ }
+ } else {
+ pomsToRefresh.addAll(pomFiles);
+ }
+
+ // refresh projects and update all dependencies
+ // this will ensure that project registry is up-to-date on GAV of all projects being updated
+ // TODO this sends multiple update events, rework using low-level registry update methods
+ try {
+ projectManager.refresh(pomsToRefresh, new SubProgressMonitor(monitor, pomFiles.size()));
+
+ for(IFile pom : pomsToRefresh) {
+ IProject project = pom.getProject();
IMavenProjectFacade facade = projectManager.getProject(project);
if(facade != null) { // facade is null if pom.xml cannot be read
projects.put(pom, facade);
}
updateStatus.put(project.getName(), Status.OK_STATUS);
- } catch(CoreException ex) {
+ }
+ } catch(CoreException ex) {
+ // TODO per-project status
+ for(IFile pom : pomsToRefresh) {
+ IProject project = pom.getProject();
updateStatus.put(project.getName(), ex.getStatus());
}
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/WorkspaceStateWriter.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/WorkspaceStateWriter.java
index cc3c1c1e..feffab14 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/WorkspaceStateWriter.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/project/WorkspaceStateWriter.java
@@ -22,15 +22,18 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.QualifiedName;
-import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.MavenProject;
+import org.eclipse.m2e.core.embedder.ArtifactKey;
import org.eclipse.m2e.core.internal.project.registry.MavenProjectManager;
import org.eclipse.m2e.core.project.IMavenProjectChangedListener;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
@@ -41,6 +44,8 @@ import org.eclipse.m2e.core.project.MavenProjectChangedEvent;
* Maintains map file of maven artifacts present in workspace.
*/
public class WorkspaceStateWriter implements IMavenProjectChangedListener {
+ private static QualifiedName PPROP_EXTENSION = new QualifiedName(WorkspaceStateWriter.class.getName(), "extension"); //$NON-NLS-1$
+
private static final Logger log = LoggerFactory.getLogger(WorkspaceStateWriter.class);
private MavenProjectManager projectManager;
@@ -55,28 +60,47 @@ public class WorkspaceStateWriter implements IMavenProjectChangedListener {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
for(IMavenProjectFacade projectFacade : projectManager.getProjects()) {
- if(!projectFacade.getProject().isAccessible()) {
- log.debug("Project registry contains closed project {}", projectFacade.getProject());
+ IProject project = projectFacade.getProject();
+ if(!project.isAccessible()) {
+ log.debug("Project registry contains closed project {}", project);
// this is actually a bug somewhere in registry refresh logic, closed projects should not be there
continue;
}
try {
- Artifact artifact = projectFacade.getMavenProject(monitor).getArtifact();
+ ArtifactKey artifact = projectFacade.getArtifactKey();
IFile pomFile = projectFacade.getPom();
IPath location = pomFile.getLocation();
if(location != null) {
File pom = location.toFile();
if(pom.canRead()) {
- String key = artifact.getGroupId() + ":" + artifact.getArtifactId() + ":pom:" + artifact.getBaseVersion(); //$NON-NLS-1$ //$NON-NLS-2$
+ String key = artifact.getGroupId() + ":" + artifact.getArtifactId() + ":pom:" + artifact.getVersion(); //$NON-NLS-1$ //$NON-NLS-2$
state.put(key, pom.getCanonicalPath());
}
}
IResource outputLocation = root.findMember(projectFacade.getOutputLocation());
- if(!"pom".equals(artifact.getType()) && outputLocation != null && outputLocation.exists()) { //$NON-NLS-1$
- String extension = artifact.getArtifactHandler().getExtension();
- String key = artifact.getGroupId()
- + ":" + artifact.getArtifactId() + ":" + extension + ":" + artifact.getBaseVersion(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- state.put(key, outputLocation.getLocation().toFile().getCanonicalPath());
+ if(!"pom".equals(projectFacade.getPackaging()) && outputLocation != null && outputLocation.exists()) { //$NON-NLS-1$
+ // three cases to consider
+ // 1. facade has cached MavenProject instance, i.e. it was refreshed during this eclipse session
+ // 2. project has persistent PPROP_EXTENSION
+ // 3. neither cached MavenProject instance nor PPROP_EXTENSION are present
+ String extension;
+ MavenProject mavenProject = projectFacade.getMavenProject();
+ if(mavenProject != null) {
+ extension = getAndPersistArtifactExtension(project, mavenProject);
+ } else {
+ extension = project.getPersistentProperty(PPROP_EXTENSION);
+ }
+ if(extension == null && mavenProject == null) {
+ // force loading of MavenProject
+ extension = getAndPersistArtifactExtension(project, projectFacade.getMavenProject(monitor));
+ }
+ if(extension != null) {
+ String key = artifact.getGroupId()
+ + ":" + artifact.getArtifactId() + ":" + extension + ":" + artifact.getVersion(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ state.put(key, outputLocation.getLocation().toFile().getCanonicalPath());
+ } else {
+ log.warn("Could not determine project {} main artifact extension.", project);
+ }
}
} catch(CoreException ex) {
log.error("Error writing workspace state file", ex);
@@ -93,4 +117,10 @@ public class WorkspaceStateWriter implements IMavenProjectChangedListener {
log.error("Error writing workspace state file", ex);
}
}
+
+ private String getAndPersistArtifactExtension(IProject project, MavenProject mavenProject) throws CoreException {
+ String extension = mavenProject.getArtifact().getArtifactHandler().getExtension();
+ project.setPersistentProperty(PPROP_EXTENSION, extension);
+ return extension;
+ }
}

Back to the top