从 IJavaProject 或 IProject 获取 org.apache.maven.model.Model
Get from IJavaProject or IProject to org.apache.maven.model.Model
我在 org.eclipse.core.commands.AbstractHandler
的 execute
实现方法中。从 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模型?
我发现有一个 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()
的用法不是 null 安全的。如果 m2eclipse 还没有将引用的项目加载到它的缓存中(即在 eclipse 启动之后),它将 return 为空。这就是为什么最好使用 IMavenProjectFacade#getMavenProject(IProgressMonitor monitor)
,它根据 javadocs.
执行 "lazy load and cache MavenProject instance"
我在 org.eclipse.core.commands.AbstractHandler
的 execute
实现方法中。从 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模型?
我发现有一个 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()
的用法不是 null 安全的。如果 m2eclipse 还没有将引用的项目加载到它的缓存中(即在 eclipse 启动之后),它将 return 为空。这就是为什么最好使用 IMavenProjectFacade#getMavenProject(IProgressMonitor monitor)
,它根据 javadocs.