package org.nodeclipse.enide.maven.launchexec; import java.io.File; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; import org.eclipse.jface.preference.IPreferenceStore; import org.nodeclipse.enide.maven.preferences.MavenConstants; /** * mvn compile exec:java -Dexec.mainClass=example.Example * *.java mvn exec<br> * see LaunchConfigurationDelegate in .debug and .phantomjs, .jjs module for comparison. * * @since 0.10 * @author Paul Verest */ public class LaunchConfigurationDelegate extends org.nodeclipse.enide.maven.launch.LaunchConfigurationDelegate implements ILaunchConfigurationDelegate { @Override // compile exec:java -Dexec.mainClass=package.Class protected void specialOptions(ILaunchConfiguration configuration, IPreferenceStore preferenceStore, List<String> cmdLine) throws CoreException { String mavenOptions= preferenceStore.getString(MavenConstants.MAVEN_OPTIONS); //mvn compile exec:java -Dexec.mainClass=example.Example // WARNING passing all parameters one-by-one fails on Windows // for what I saw in JDK source Windows magic =variables // i.e. can't pass '=' this way String file = configuration.getAttribute("KEY_FILE_PATH", ""); IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(file); IProject project = res.getProject(); IPath relPath = res.getProjectRelativePath(); // =src/main/java/maven/MainClass.java String packageClass = ""+relPath; // remove maven source folder if (packageClass.startsWith("src/main/java/")){ packageClass = packageClass.substring("src/main/java/".length()); } else if (packageClass.startsWith("src/")){ packageClass = packageClass.substring("src/".length()); } // cut .java packageClass = packageClass.substring(0, packageClass.lastIndexOf('.')); packageClass = packageClass.replace('/', '.'); // cmdLine.add("-Dexec.mainClass="+packageClass ); // as one string //cmdLine.add(mavenPath+" "+mavenOptions+" compile exec:java -Dexec.mainClass="+packageClass); cmdLine.add(mavenOptions+" compile exec:java -Dexec.mainClass="+packageClass); //workingPath = new File(project.getLocation().toOSString()); //setWorkingDirectoryDefault(project.getLocation().toOSString()); workingDirectoryDefault = new File(project.getLocation().toOSString()); } }