Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Fedorenko2014-04-18 21:52:54 +0000
committerIgor Fedorenko2014-04-20 23:04:43 +0000
commit150c457edc53494dd4d48bb72454f998e08473e7 (patch)
treeff56198685d0ffd373c3d9405b93625ac930d327 /org.eclipse.m2e.core
parent86e1ca34912a6da5882f6cc3283f84ed22bdf3b1 (diff)
downloadm2e-core-150c457edc53494dd4d48bb72454f998e08473e7.tar.gz
m2e-core-150c457edc53494dd4d48bb72454f998e08473e7.tar.xz
m2e-core-150c457edc53494dd4d48bb72454f998e08473e7.zip
432436 ability to configure maven installation extensions WIP
Change-Id: Iddef9107e5c75a287e4ca58cd04c898cc0177811 Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
Diffstat (limited to 'org.eclipse.m2e.core')
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntimeManager.java10
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/Messages.java2
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/AbstractMavenRuntime.java52
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/AbstractWorkspaceRuntime.java3
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/ClasspathEntry.java12
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenEmbeddedRuntime.java1
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenExternalRuntime.java15
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/ProjectClasspathEntry.java28
-rw-r--r--org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/messages.properties1
9 files changed, 118 insertions, 6 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntimeManager.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntimeManager.java
index 437c427b..0eb8df36 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntimeManager.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/embedder/MavenRuntimeManager.java
@@ -210,7 +210,10 @@ public class MavenRuntimeManager {
}
List<ClasspathEntry> result = new ArrayList<ClasspathEntry>();
for(String entry : string.split("\\|")) {
- result.add(ClasspathEntry.fromExternalForm(entry));
+ ClasspathEntry decoded = ClasspathEntry.fromExternalForm(entry);
+ if(decoded != null) {
+ result.add(decoded);
+ }
}
return result;
}
@@ -239,8 +242,9 @@ public class MavenRuntimeManager {
private AbstractMavenRuntime createRuntime(String name, Preferences preferences) {
String location = preferences.get("location", null);
- List<ClasspathEntry> extensions = decodeClasspath(preferences.get("extensions", null));
- return new MavenExternalRuntime(name, location);
+ MavenExternalRuntime runtime = new MavenExternalRuntime(name, location);
+ runtime.setExtensions(decodeClasspath(preferences.get("extensions", null)));
+ return runtime;
}
/**
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/Messages.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/Messages.java
index 5c5d95c4..d091b65c 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/Messages.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/Messages.java
@@ -246,6 +246,8 @@ public class Messages extends NLS {
public static String ProjectConversion_error_duplicate_conversion_participant;
+ public static String AbstractMavenRuntime_unknownProject;
+
static {
// initialize resource bundle
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/AbstractMavenRuntime.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/AbstractMavenRuntime.java
index f32de7ed..2f9d5e89 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/AbstractMavenRuntime.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/AbstractMavenRuntime.java
@@ -11,9 +11,25 @@
package org.eclipse.m2e.core.internal.launch;
+import java.util.ArrayList;
import java.util.List;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+
+import org.eclipse.m2e.core.MavenPlugin;
+import org.eclipse.m2e.core.embedder.IMavenLauncherConfiguration;
import org.eclipse.m2e.core.embedder.MavenRuntime;
+import org.eclipse.m2e.core.internal.IMavenConstants;
+import org.eclipse.m2e.core.internal.Messages;
+import org.eclipse.m2e.core.project.IMavenProjectFacade;
+import org.eclipse.m2e.core.project.IMavenProjectRegistry;
/**
@@ -21,8 +37,14 @@ import org.eclipse.m2e.core.embedder.MavenRuntime;
*/
public abstract class AbstractMavenRuntime implements MavenRuntime {
+ private static final IWorkspaceRoot workspace = ResourcesPlugin.getWorkspace().getRoot();
+
+ private static final IMavenProjectRegistry registry = MavenPlugin.getMavenProjectRegistry();
+
private final String name;
+ private List<ClasspathEntry> extensions;
+
@Deprecated
protected AbstractMavenRuntime() {
this.name = null;
@@ -38,10 +60,38 @@ public abstract class AbstractMavenRuntime implements MavenRuntime {
}
public List<ClasspathEntry> getExtensions() {
- return null;
+ return extensions;
+ }
+
+ public void setExtensions(List<ClasspathEntry> extensions) {
+ this.extensions = extensions != null && !extensions.isEmpty() ? new ArrayList<ClasspathEntry>(extensions) : null;
}
public boolean isLegacy() {
return name == null;
}
+
+ protected void collectExtensions(IMavenLauncherConfiguration collector, IProgressMonitor monitor)
+ throws CoreException {
+ if(extensions != null) {
+ for(ClasspathEntry entry : extensions) {
+ if(entry instanceof ProjectClasspathEntry) {
+ collectProject(collector, (ProjectClasspathEntry) entry, monitor);
+ }
+ }
+ }
+ }
+
+ private void collectProject(IMavenLauncherConfiguration collector, ProjectClasspathEntry entry,
+ IProgressMonitor monitor) throws CoreException {
+ IProject project = workspace.getProject(entry.getProject());
+ IMavenProjectFacade facade = registry.create(project, monitor);
+ if(facade == null) {
+ throw new CoreException(new Status(IStatus.ERROR, IMavenConstants.PLUGIN_ID, NLS.bind(
+ Messages.AbstractMavenRuntime_unknownProject, entry.getProject())));
+
+ }
+ collector.addProjectEntry(facade);
+ }
+
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/AbstractWorkspaceRuntime.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/AbstractWorkspaceRuntime.java
index 61986968..1c592add 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/AbstractWorkspaceRuntime.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/AbstractWorkspaceRuntime.java
@@ -109,6 +109,9 @@ public abstract class AbstractWorkspaceRuntime extends AbstractMavenRuntime {
//
collector.setMainType(getMainClass(), PLEXUS_CLASSWORLD_NAME);
collector.addRealm(PLEXUS_CLASSWORLD_NAME);
+
+ collectExtensions(collector, monitor);
+
//
// plexus.core is the current realm, and now we want the add the SLF4J loggging configuration if
// we have a verion>3.1.x Maven-like runtime
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/ClasspathEntry.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/ClasspathEntry.java
index 6572cca4..95bb8849 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/ClasspathEntry.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/ClasspathEntry.java
@@ -11,13 +11,23 @@
package org.eclipse.m2e.core.internal.launch;
+
+
/**
* @since 1.5
*/
public abstract class ClasspathEntry {
- public abstract String toExternalForm();
+ public String toExternalForm() {
+ if(this instanceof ProjectClasspathEntry) {
+ return "P/" + ((ProjectClasspathEntry) this).getProject();
+ }
+ throw new IllegalArgumentException();
+ }
public static ClasspathEntry fromExternalForm(String str) {
+ if(str.startsWith("P/")) {
+ return new ProjectClasspathEntry(str.substring(2));
+ }
return null;
}
}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenEmbeddedRuntime.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenEmbeddedRuntime.java
index 6668e3fa..5f820a46 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenEmbeddedRuntime.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenEmbeddedRuntime.java
@@ -105,6 +105,7 @@ public class MavenEmbeddedRuntime extends AbstractMavenRuntime {
}
collector.addRealm(PLEXUS_CLASSWORLD_NAME);
+ collectExtensions(collector, monitor);
for(String entry : CLASSPATH) {
// https://issues.sonatype.org/browse/MNGECLIPSE-2507
if(!entry.contains("plexus-build-api")) {
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenExternalRuntime.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenExternalRuntime.java
index 47420626..88f4c5a9 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenExternalRuntime.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/MavenExternalRuntime.java
@@ -81,13 +81,15 @@ public class MavenExternalRuntime extends AbstractMavenRuntime {
return new File(location, "bin/m2.conf"); //$NON-NLS-1$
}
- public void createLauncherConfiguration(final IMavenLauncherConfiguration collector, IProgressMonitor monitor)
+ public void createLauncherConfiguration(final IMavenLauncherConfiguration collector, final IProgressMonitor monitor)
throws CoreException {
collector.addRealm(IMavenLauncherConfiguration.LAUNCHER_REALM);
collector.addArchiveEntry(getLauncherClasspath());
ConfigurationHandler handler = new ConfigurationHandler() {
+ private String mainRealmName;
+
public void addImportFrom(String relamName, String importSpec) {
throw new UnsupportedOperationException(Messages.MavenExternalRuntime_exc_unsupported);
}
@@ -109,10 +111,21 @@ public class MavenExternalRuntime extends AbstractMavenRuntime {
}
public void addRealm(String realmName) {
+ if(mainRealmName == null) {
+ throw new IllegalStateException();
+ }
collector.addRealm(realmName);
+ if(mainRealmName.equals(realmName)) {
+ try {
+ collectExtensions(collector, monitor);
+ } catch(CoreException ex) {
+ throw new ExceptionWrapper(ex);
+ }
+ }
}
public void setAppMain(String mainClassName, String mainRealmName) {
+ this.mainRealmName = mainRealmName;
collector.setMainType(mainClassName, mainRealmName);
}
};
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/ProjectClasspathEntry.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/ProjectClasspathEntry.java
new file mode 100644
index 00000000..e6eb231a
--- /dev/null
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/launch/ProjectClasspathEntry.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Takari, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Takari, Inc. - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.m2e.core.internal.launch;
+
+/**
+ * @since 1.5
+ */
+public class ProjectClasspathEntry extends ClasspathEntry {
+
+ private String project;
+
+ public ProjectClasspathEntry(String project) {
+ this.project = project;
+ }
+
+ public String getProject() {
+ return project;
+ }
+}
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/messages.properties b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/messages.properties
index 227ff9e7..b349539f 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/messages.properties
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/messages.properties
@@ -1,4 +1,5 @@
AbstractLifecycleMapping_could_not_update_project_configuration=Could not update project {0} configuration
+AbstractMavenRuntime_unknownProject=Not a Maven project {0}
AbstractProjectConfigurator_error_missing_nature=Project does not have required nature
AbstractTransferListenerAdapter_4=0% {0}
AbstractTransferListenerAdapter_byte=B

Back to the top