我在execute
实施的org.eclipse.core.commands.AbstractHandler
方法内。从ExecutionEvent
我可以获得项目参考:
@Override
public Object execute(ExecutionEvent event) throws ExecutionException
{
TreeSelection selection = (TreeSelection)HandlerUtil.getCurrentSelection(event);
IJavaElement je = (IJavaElement)selection.getFirstElement()
IJavaProject jproj = je.getJavaProject();
IProject p = (IProject)jproj.getResource();
//...
}
通过核心表达式,我确保项目具有java和maven性质。所以我想从该项目中获得一个maven模型。当然,有一种方法可以从文件中获取它:
MavenXpp3Reader mReader = new MavenXpp3Reader();
Model pomModel = mReader.read(p.getFile("pom.xml").getContents());
但是因为我可以访问工作区,所以我不确定自己是否真的需要阅读POM文件。我认为应该已经通过m2eclipse插件进行了评估。有办法以某种方式访问项目的maven模型吗?
答案 0 :(得分:1)
我发现有一个maven项目注册表,它保存工作区的所有已知maven项目。借助它,我可以在不手动读取POM的情况下进入maven模型:
public Object execute(ExecutionEvent event) throws ExecutionException
{
TreeSelection selection = (TreeSelection)HandlerUtil.getCurrentSelection(event);
IJavaElement je = (IJavaElement)selection.getFirstElement();
IJavaProject jproj = je.getJavaProject();
IProject proj = (IProject)jproj.getResource();
IMavenProjectFacade facade = MavenPlugin.getMavenProjectRegistry().getProject(proj);
Model mavenModel = facade.getMavenProject().getModel();
//...
return null;
}
修改 IMavenProjectFacade#getMavenProject()
的使用不是空的安全。如果m2eclipse尚未将引用的项目加载到其缓存中(即在eclipse启动之后),它将返回null。这就是为什么最好使用IMavenProjectFacade#getMavenProject(IProgressMonitor monitor)
根据javadocs“延迟加载和缓存MavenProject实例”。