Skip to content

June 3, 2005

Integrating Maven in Eclipse

I am currently writing an Eclipse wizard that helps with creating a new AndroMDA project. AndroMDA already has two wizards that help with creating a new project - they are both commandline based: one for ANT, the other one for Maven (AndroMDApp Maven Plug-in).

One of the biggest problems with integrating Maven is that there doesn't seem to be something like a main entry class that provides some method one can call and hand in some parameters to get things going. Instead, the only way to start maven is to start a new VM and run the main class. Which turns out to be quite annyoing. Here is an extract of the code that is needed to do the trick:


// VM runner
VMRunnerConfiguration vmConfig = new VMRunnerConfiguration(
"com.werken.forehead.Forehead", foreheadClasspath);

vmConfig.setVMArguments(options);
vmConfig.setProgramArguments(goals);
vmConfig.setWorkingDirectory(projectParentDir.getAbsolutePath());
vmConfig.setEnvironment(environment);

String launchMode = ILaunchManager.RUN_MODE;
IVMRunner vmRunner = getJRE().getVMRunner(launchMode);

if (vmRunner != null)
{
// launch manager
ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType type = manager
.getLaunchConfigurationType(IJavaLaunchConfigurationConstants
.ID_JAVA_APPLICATION);

ILaunchConfigurationWorkingCopy launchWorkingCopy = type.newInstance(null,
"Create AndroMDA project.");
launchWorkingCopy.setAttribute(IDebugUIConstants.ATTR_PRIVATE, true);

monitor.worked(2);
monitor.subTask("Starting maven.");

ILaunch newLaunch = new Launch(launchWorkingCopy, ILaunchManager.RUN_MODE, null);
DebugPlugin.getDefault().getLaunchManager().addLaunch(newLaunch);
vmRunner.run(vmConfig, newLaunch, monitor);
monitor.worked(8);
}

Right at the start you can see something called "forehead". This some funky launcher the Maven guys use to set up the class path and start the main class. I wonder why they are making things so complicated. One drawback of running a tool like this is that you cannot get feedback about how far processing has proceeded. I would have liked to provide a real progress monitor for the wizard, but unfortunately this is not possible. Maybe I'll take a look at Maven 2.

Thanks for reading this post. Follow me on twitter here to be notified about updates and other posts I write. Or, subscribe to my RSS feed here

Fork me on GitHub
Read more from Eclipse, Java, MDA

Comments are closed.