Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Fedorenko2013-05-05 02:24:06 +0000
committerIgor Fedorenko2013-05-05 02:24:06 +0000
commit9bcf35c372890d7963e18db0ee3a9160c04e6a74 (patch)
tree9324eb43f1e17256ddb5b608ccca17d9d01ad412 /org.eclipse.m2e.launching/src
parent99de7feb2f2dcfa3a5328b532f3f2804ae4d825a (diff)
downloadm2e-core-9bcf35c372890d7963e18db0ee3a9160c04e6a74.tar.gz
m2e-core-9bcf35c372890d7963e18db0ee3a9160c04e6a74.tar.xz
m2e-core-9bcf35c372890d7963e18db0ee3a9160c04e6a74.zip
Moved maven launch support to a separate class
Extracted MavenRuntimeLaunchSupport that can be used from any java launch configuration delegate. It can be used to generate and cleanup classworld configuration file and set vm arguments matching maven runtime selected in the launch configuration. Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
Diffstat (limited to 'org.eclipse.m2e.launching/src')
-rw-r--r--org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchDelegate.java197
-rw-r--r--org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchUtils.java22
-rw-r--r--org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenRuntimeLaunchSupport.java277
3 files changed, 318 insertions, 178 deletions
diff --git a/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchDelegate.java b/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchDelegate.java
index fbcb1a78..f3e489d8 100644
--- a/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchDelegate.java
+++ b/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchDelegate.java
@@ -11,10 +11,9 @@
package org.eclipse.m2e.internal.launch;
+import static org.eclipse.m2e.internal.launch.MavenLaunchUtils.quote;
+
import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -25,45 +24,27 @@ import org.slf4j.LoggerFactory;
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.core.runtime.jobs.Job;
-import org.eclipse.debug.core.DebugEvent;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.model.IProcess;
import org.eclipse.debug.core.sourcelookup.ISourceLookupParticipant;
-import org.eclipse.debug.ui.RefreshTab;
import org.eclipse.jdt.launching.IVMRunner;
import org.eclipse.jdt.launching.JavaLaunchDelegate;
-import org.eclipse.jdt.launching.VMRunnerConfiguration;
import org.eclipse.jdt.launching.sourcelookup.containers.JavaSourceLookupParticipant;
import org.eclipse.osgi.util.NLS;
import org.eclipse.m2e.actions.MavenLaunchConstants;
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.embedder.IMavenConfiguration;
-import org.eclipse.m2e.core.embedder.IMavenLauncherConfiguration;
-import org.eclipse.m2e.core.embedder.MavenRuntime;
-import org.eclipse.m2e.core.internal.MavenPluginActivator;
+import org.eclipse.m2e.internal.launch.MavenRuntimeLaunchSupport.VMArguments;
public class MavenLaunchDelegate extends JavaLaunchDelegate implements MavenLaunchConstants {
- private static final Logger log = LoggerFactory.getLogger(MavenLaunchDelegate.class);
+ static final Logger log = LoggerFactory.getLogger(MavenLaunchDelegate.class);
private static final String LAUNCHER_TYPE = "org.codehaus.classworlds.Launcher"; //$NON-NLS-1$
- private static final String LAUNCHER_TYPE3 = "org.codehaus.plexus.classworlds.launcher.Launcher"; // classworlds 2.0 //$NON-NLS-1$
-
- private static final String LAUNCH_M2CONF_FILE = "org.eclipse.m2e.internal.launch.M2_CONF"; //$NON-NLS-1$
-
- private MavenRuntime runtime;
-
- private MavenLauncherConfigurationHandler m2conf;
-
- private File confFile;
+ //classworlds 2.0
+ private static final String LAUNCHER_TYPE3 = "org.codehaus.plexus.classworlds.launcher.Launcher"; //$NON-NLS-1$
private ILaunch launch;
@@ -73,6 +54,8 @@ public class MavenLaunchDelegate extends JavaLaunchDelegate implements MavenLaun
private String programArguments;
+ private MavenRuntimeLaunchSupport launchSupport;
+
public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor)
throws CoreException {
this.launch = launch;
@@ -84,31 +67,7 @@ public class MavenLaunchDelegate extends JavaLaunchDelegate implements MavenLaun
log.info(" mvn" + getProgramArguments(configuration)); //$NON-NLS-1$
try {
- runtime = MavenLaunchUtils.getMavenRuntime(configuration);
-
- m2conf = new MavenLauncherConfigurationHandler();
- if(shouldResolveWorkspaceArtifacts(configuration)) {
- m2conf.addArchiveEntry(MavenLaunchUtils.getCliResolver(runtime));
- }
- MavenLaunchUtils.addUserComponents(configuration, m2conf);
- runtime.createLauncherConfiguration(m2conf, monitor);
-
- File state = MavenPluginActivator.getDefault().getStateLocation().toFile();
- try {
- File dir = new File(state, "launches"); //$NON-NLS-1$
- dir.mkdirs();
- confFile = File.createTempFile("m2conf", ".tmp", dir); //$NON-NLS-1$ //$NON-NLS-2$
- launch.setAttribute(LAUNCH_M2CONF_FILE, confFile.getCanonicalPath());
- OutputStream os = new FileOutputStream(confFile);
- try {
- m2conf.save(os);
- } finally {
- os.close();
- }
- } catch(IOException e) {
- throw new CoreException(new Status(IStatus.ERROR, PLUGIN_ID, -1,
- Messages.MavenLaunchDelegate_error_cannot_create_conf, e));
- }
+ this.launchSupport = MavenRuntimeLaunchSupport.create(configuration, launch, monitor);
if(launch.getSourceLocator() instanceof MavenSourceLocator) {
final MavenSourceLocator sourceLocator = (MavenSourceLocator) launch.getSourceLocator();
@@ -134,30 +93,15 @@ public class MavenLaunchDelegate extends JavaLaunchDelegate implements MavenLaun
}
public IVMRunner getVMRunner(final ILaunchConfiguration configuration, String mode) throws CoreException {
- final IVMRunner runner = super.getVMRunner(configuration, mode);
-
- return new IVMRunner() {
- public void run(VMRunnerConfiguration runnerConfiguration, ILaunch launch, IProgressMonitor monitor)
- throws CoreException {
- runner.run(runnerConfiguration, launch, monitor);
-
- IProcess[] processes = launch.getProcesses();
- if(processes != null && processes.length > 0) {
- BackgroundResourceRefresher refresher = new BackgroundResourceRefresher(configuration, launch);
- refresher.init();
- } else {
- removeTempFiles(launch);
- }
- }
- };
+ return launchSupport.decorateVMRunner(super.getVMRunner(configuration, mode));
}
- public String getMainTypeName(ILaunchConfiguration configuration) throws CoreException {
- return runtime.getVersion().startsWith("3.0") ? LAUNCHER_TYPE3 : LAUNCHER_TYPE; //$NON-NLS-1$
+ public String getMainTypeName(ILaunchConfiguration configuration) {
+ return launchSupport.getVersion().startsWith("3.0") ? LAUNCHER_TYPE3 : LAUNCHER_TYPE; //$NON-NLS-1$
}
- public String[] getClasspath(ILaunchConfiguration configuration) throws CoreException {
- List<String> cp = m2conf.getRealmEntries(IMavenLauncherConfiguration.LAUNCHER_REALM);
+ public String[] getClasspath(ILaunchConfiguration configuration) {
+ List<String> cp = launchSupport.getBootClasspath();
return cp.toArray(new String[cp.size()]);
}
@@ -180,53 +124,16 @@ public class MavenLaunchDelegate extends JavaLaunchDelegate implements MavenLaun
}
public String getVMArguments(ILaunchConfiguration configuration) throws CoreException {
- /*
- * <pre>
- * %MAVEN_JAVA_EXE% %MAVEN_OPTS%
- * -classpath %CLASSWORLDS_JAR%
- * "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf"
- * "-Dmaven.home=%M2_HOME%"
- * org.codehaus.classworlds.Launcher
- * %MAVEN_CMD_LINE_ARGS%
- * </pre>
- */
-
- StringBuffer sb = new StringBuffer();
-
- // workspace artifact resolution
- if(shouldResolveWorkspaceArtifacts(configuration)) {
- File state = MavenPluginActivator.getDefault().getMavenProjectManager().getWorkspaceStateFile();
- sb.append(" -Dm2eclipse.workspace.state=").append(quote(state.getAbsolutePath())); //$NON-NLS-1$
- }
-
- // maven.home
- String location = runtime.getLocation();
- if(location != null) {
- sb.append(" -Dmaven.home=").append(quote(location)); //$NON-NLS-1$
- }
-
- // m2.conf
- sb.append(" -Dclassworlds.conf=").append(quote(confFile.getAbsolutePath())); //$NON-NLS-1$
+ VMArguments arguments = launchSupport.getVMArguments();
// user configured entries
- sb.append(" ").append(super.getVMArguments(configuration)); //$NON-NLS-1$
+ arguments.append(super.getVMArguments(configuration));
for(IMavenLaunchParticipant participant : participants) {
- String vmArguments = participant.getVMArguments(configuration, launch, monitor);
- if(vmArguments != null) {
- sb.append(" ").append(vmArguments);
- }
+ arguments.append(participant.getVMArguments(configuration, launch, monitor));
}
- return sb.toString();
- }
-
- private String quote(String string) {
- return string.indexOf(' ') > -1 ? "\"" + string + "\"" : string; //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- private boolean shouldResolveWorkspaceArtifacts(ILaunchConfiguration configuration) throws CoreException {
- return configuration.getAttribute(ATTR_WORKSPACE_RESOLUTION, false);
+ return arguments.toString();
}
protected String getGoals(ILaunchConfiguration configuration) throws CoreException {
@@ -344,73 +251,7 @@ public class MavenLaunchDelegate extends JavaLaunchDelegate implements MavenLaun
}
static void removeTempFiles(ILaunch launch) {
- String m2confName = launch.getAttribute(LAUNCH_M2CONF_FILE);
- if(m2confName != null) {
- new File(m2confName).delete();
- }
- }
-
- /**
- * Refreshes resources as specified by a launch configuration, when an associated process terminates. Adapted from
- * org.eclipse.ui.externaltools.internal.program.launchConfigurations.BackgroundResourceRefresher
- */
- public static class BackgroundResourceRefresher implements IDebugEventSetListener {
- final ILaunchConfiguration configuration;
-
- final IProcess process;
-
- final ILaunch launch;
-
- public BackgroundResourceRefresher(ILaunchConfiguration configuration, ILaunch launch) {
- this.configuration = configuration;
- this.process = launch.getProcesses()[0];
- this.launch = launch;
- }
-
- /**
- * If the process has already terminated, resource refreshing is done immediately in the current thread. Otherwise,
- * refreshing is done when the process terminates.
- */
- public void init() {
- synchronized(process) {
- if(process.isTerminated()) {
- processResources();
- } else {
- DebugPlugin.getDefault().addDebugEventListener(this);
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[])
- */
- public void handleDebugEvents(DebugEvent[] events) {
- for(int i = 0; i < events.length; i++ ) {
- DebugEvent event = events[i];
- if(event.getSource() == process && event.getKind() == DebugEvent.TERMINATE) {
- DebugPlugin.getDefault().removeDebugEventListener(this);
- processResources();
- break;
- }
- }
- }
-
- protected void processResources() {
- removeTempFiles(launch);
-
- Job job = new Job(Messages.MavenLaunchDelegate_job_name) {
- public IStatus run(IProgressMonitor monitor) {
- try {
- RefreshTab.refreshResources(configuration, monitor);
- return Status.OK_STATUS;
- } catch(CoreException e) {
- log.error(e.getMessage(), e);
- return e.getStatus();
- }
- }
- };
- job.schedule();
- }
+ MavenRuntimeLaunchSupport.removeTempFiles(launch);
}
private List<IMavenLaunchParticipant> getParticipants(ILaunchConfiguration configuration, ILaunch launch)
diff --git a/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchUtils.java b/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchUtils.java
index 0418c7ac..44761cc1 100644
--- a/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchUtils.java
+++ b/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenLaunchUtils.java
@@ -123,4 +123,26 @@ public class MavenLaunchUtils {
}
}
}
+
+ /**
+ * @since 1.4
+ */
+ public static String quote(String string) {
+ return string.indexOf(' ') > -1 ? "\"" + string + "\"" : string; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * @since 1.4
+ */
+ public static String toPath(List<String> cp) {
+ StringBuilder sb = new StringBuilder();
+ for(String cpe : cp) {
+ if(sb.length() > 0) {
+ sb.append(File.pathSeparator);
+ }
+ sb.append(cpe);
+ }
+ return sb.toString();
+ }
+
}
diff --git a/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenRuntimeLaunchSupport.java b/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenRuntimeLaunchSupport.java
new file mode 100644
index 00000000..b2f5fcbf
--- /dev/null
+++ b/org.eclipse.m2e.launching/src/org/eclipse/m2e/internal/launch/MavenRuntimeLaunchSupport.java
@@ -0,0 +1,277 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2010 Sonatype, 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:
+ * Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.m2e.internal.launch;
+
+import static org.eclipse.m2e.actions.MavenLaunchConstants.ATTR_WORKSPACE_RESOLUTION;
+import static org.eclipse.m2e.actions.MavenLaunchConstants.PLUGIN_ID;
+import static org.eclipse.m2e.internal.launch.MavenLaunchUtils.quote;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+
+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.core.runtime.jobs.Job;
+import org.eclipse.debug.core.DebugEvent;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.IDebugEventSetListener;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.debug.ui.RefreshTab;
+import org.eclipse.jdt.launching.IVMRunner;
+import org.eclipse.jdt.launching.VMRunnerConfiguration;
+
+import org.eclipse.m2e.core.embedder.IMavenLauncherConfiguration;
+import org.eclipse.m2e.core.embedder.MavenRuntime;
+import org.eclipse.m2e.core.internal.MavenPluginActivator;
+import org.eclipse.m2e.core.internal.project.WorkspaceStateWriter;
+
+
+/**
+ * Helper class to configure and launch MavenRuntime instance.
+ * <p>
+ * Generates classworld configuration file, i.e. m2.conf. Generated classworld configuration file will include
+ * cliresolver for launch configuration that have workspace resolution enabled.
+ * <p>
+ * Sets the following conventional launch configuration attributes.
+ * <ul>
+ * <li>m2eclipse.workspace.state, full absolute path of m2e workspace state file. See {@link WorkspaceStateWriter} for
+ * details of the state file format. Only set if workspace dependency resolution is enabled for the launch
+ * configuration.</li>
+ * <li>maven.bootclasspath, maven runtime bootstrap classpath, normally only contains classworlds jar.</li>
+ * <li>maven.home, location of maven runtime, logical name is used for embedded and workspace runtimes</li>
+ * <li>classworlds.conf, location of classworlds configuration file, i.e. m2.conf</li>
+ * </ul>
+ *
+ * @since 1.4
+ */
+public class MavenRuntimeLaunchSupport {
+ private static final String LAUNCH_M2CONF_FILE = "org.eclipse.m2e.internal.launch.M2_CONF"; //$NON-NLS-1$
+
+ private final MavenRuntime runtime;
+
+ private final MavenLauncherConfigurationHandler cwconf;
+
+ private final boolean resolveWorkspaceArtifacts;
+
+ private final File cwconfFile;
+
+ public static class VMArguments {
+
+ private final StringBuilder properties = new StringBuilder();
+
+ public void append(String str) {
+ if(str != null) {
+ str = str.trim();
+ }
+ if(str != null && str.length() > 0) {
+ if(properties.length() > 0) {
+ properties.append(' ');
+ }
+ properties.append(str);
+ }
+ }
+
+ public void appendProperty(String key, String value) {
+ append("-D" + key + "=" + value);
+ }
+
+ @Override
+ public String toString() {
+ return properties.toString();
+ }
+ }
+
+ private MavenRuntimeLaunchSupport(MavenRuntime runtime, MavenLauncherConfigurationHandler cwconf, File cwconfFile,
+ boolean resolveWorkspaceArtifacts) {
+ this.runtime = runtime;
+ this.cwconf = cwconf;
+ this.cwconfFile = cwconfFile;
+ this.resolveWorkspaceArtifacts = resolveWorkspaceArtifacts;
+ }
+
+ public static MavenRuntimeLaunchSupport create(ILaunchConfiguration configuration, ILaunch launch,
+ IProgressMonitor monitor) throws CoreException {
+ MavenRuntime runtime = MavenLaunchUtils.getMavenRuntime(configuration);
+
+ boolean resolveWorkspaceArtifacts = configuration.getAttribute(ATTR_WORKSPACE_RESOLUTION, false);
+
+ MavenLauncherConfigurationHandler cwconf = new MavenLauncherConfigurationHandler();
+ if(resolveWorkspaceArtifacts) {
+ cwconf.addArchiveEntry(MavenLaunchUtils.getCliResolver(runtime));
+ }
+ MavenLaunchUtils.addUserComponents(configuration, cwconf);
+ runtime.createLauncherConfiguration(cwconf, monitor);
+
+ File cwconfFile;
+ try {
+ File state = MavenLaunchPlugin.getDefault().getStateLocation().toFile();
+ File dir = new File(state, "launches"); //$NON-NLS-1$
+ dir.mkdirs();
+ cwconfFile = File.createTempFile("m2conf", ".tmp", dir); //$NON-NLS-1$ //$NON-NLS-2$
+ launch.setAttribute(LAUNCH_M2CONF_FILE, cwconfFile.getCanonicalPath());
+ OutputStream os = new FileOutputStream(cwconfFile);
+ try {
+ cwconf.save(os);
+ } finally {
+ os.close();
+ }
+ } catch(IOException e) {
+ throw new CoreException(new Status(IStatus.ERROR, PLUGIN_ID, -1,
+ Messages.MavenLaunchDelegate_error_cannot_create_conf, e));
+ }
+
+ return new MavenRuntimeLaunchSupport(runtime, cwconf, cwconfFile, resolveWorkspaceArtifacts);
+ }
+
+ public static void removeTempFiles(ILaunch launch) {
+ String m2confName = launch.getAttribute(LAUNCH_M2CONF_FILE);
+ if(m2confName != null) {
+ new File(m2confName).delete();
+ }
+ }
+
+ /**
+ * MAVEN_HOME or equivalent location of the Maven runtime.
+ */
+ public String getLocation() {
+ return runtime.getLocation();
+ }
+
+ /**
+ * Location of classworld configuration file, i.e. m2.conf, of the Maven runtime.
+ */
+ public File getClassworldConfFile() {
+ return cwconfFile;
+ }
+
+ /**
+ * Bootstrap classpath of the Maven runtime, normally only contains classworlds jar.
+ */
+ public List<String> getBootClasspath() {
+ return cwconf.getRealmEntries(IMavenLauncherConfiguration.LAUNCHER_REALM);
+ }
+
+ public String getVersion() {
+ return runtime.getVersion();
+ }
+
+ public VMArguments getVMArguments() {
+ VMArguments properties = new VMArguments();
+
+ // workspace artifact resolution
+ if(resolveWorkspaceArtifacts) {
+ File state = MavenPluginActivator.getDefault().getMavenProjectManager().getWorkspaceStateFile();
+ properties.appendProperty("m2eclipse.workspace.state", quote(state.getAbsolutePath())); //$NON-NLS-1$
+ }
+
+ // maven.home
+ String location = runtime.getLocation();
+ if(location != null) {
+ properties.appendProperty("maven.home", quote(location)); //$NON-NLS-1$
+ }
+
+ // m2.conf
+ properties.appendProperty("classworlds.conf", quote(cwconfFile.getAbsolutePath())); //$NON-NLS-1$
+
+ // maven bootclasspath, i.e. classworlds jar.
+ // TODO only used by ITs, so consider making optional
+ properties.appendProperty("maven.bootclasspath", MavenLaunchUtils.toPath(getBootClasspath()));
+
+ return properties;
+ }
+
+ public IVMRunner decorateVMRunner(final IVMRunner runner) {
+ return new IVMRunner() {
+ public void run(VMRunnerConfiguration runnerConfiguration, ILaunch launch, IProgressMonitor monitor)
+ throws CoreException {
+ runner.run(runnerConfiguration, launch, monitor);
+
+ IProcess[] processes = launch.getProcesses();
+ if(processes != null && processes.length > 0) {
+ ILaunchConfiguration configuration = launch.getLaunchConfiguration();
+ BackgroundResourceRefresher refresher = new BackgroundResourceRefresher(configuration, launch);
+ refresher.init();
+ } else {
+ removeTempFiles(launch);
+ }
+ }
+ };
+ }
+}
+
+
+/**
+ * Refreshes resources as specified by a launch configuration, when an associated process terminates. Adapted from
+ * org.eclipse.ui.externaltools.internal.program.launchConfigurations.BackgroundResourceRefresher
+ */
+class BackgroundResourceRefresher implements IDebugEventSetListener {
+ final ILaunchConfiguration configuration;
+
+ final IProcess process;
+
+ final ILaunch launch;
+
+ public BackgroundResourceRefresher(ILaunchConfiguration configuration, ILaunch launch) {
+ this.configuration = configuration;
+ this.process = launch.getProcesses()[0];
+ this.launch = launch;
+ }
+
+ /**
+ * If the process has already terminated, resource refreshing is done immediately in the current thread. Otherwise,
+ * refreshing is done when the process terminates.
+ */
+ public void init() {
+ synchronized(process) {
+ if(process.isTerminated()) {
+ processResources();
+ } else {
+ DebugPlugin.getDefault().addDebugEventListener(this);
+ }
+ }
+ }
+
+ public void handleDebugEvents(DebugEvent[] events) {
+ for(int i = 0; i < events.length; i++ ) {
+ DebugEvent event = events[i];
+ if(event.getSource() == process && event.getKind() == DebugEvent.TERMINATE) {
+ DebugPlugin.getDefault().removeDebugEventListener(this);
+ processResources();
+ break;
+ }
+ }
+ }
+
+ protected void processResources() {
+ MavenLaunchDelegate.removeTempFiles(launch);
+
+ Job job = new Job(Messages.MavenLaunchDelegate_job_name) {
+ public IStatus run(IProgressMonitor monitor) {
+ try {
+ RefreshTab.refreshResources(configuration, monitor);
+ return Status.OK_STATUS;
+ } catch(CoreException e) {
+ MavenLaunchDelegate.log.error(e.getMessage(), e);
+ return e.getStatus();
+ }
+ }
+ };
+ job.schedule();
+ }
+}

Back to the top