在Eclipse插件中,如果打开一个编辑器,很容易获得当前项目(IProject
),您只需要使用这个片段:
IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
IFileEditorInput input = (IFileEditorInput)editor.getEditorInput();
IFile file = input.getFile();
IProject project = file.getProject();
但是,如果我没有在编辑器中打开任何类型的文件,有没有办法获得项目?,即:想象你有一个插件,当你右键单击一个项目时添加一个选项,如果单击此选项将启动一个对话框窗口,如何在此对话框中打印项目名称?
答案 0 :(得分:2)
对于使用'命令'的菜单项等。与一个'处理程序'您可以在处理程序中使用代码,如:
public class CommandHandler extends AbstractHandler
{
@Override
public Object execute(ExecutionEvent event) throws ExecutionException
{
ISelection sel = HandlerUtil.getCurrentSelection(event);
if (sel instanceof IStructuredSelection)
{
Object selected = ((IStructuredSelection)sel).getFirstElement();
IResource resource = (IResource)Platform.getAdapterManager().getAdapter(selected, IResource.class);
if (resource != null)
{
IProject project = resource.getProject();
...
}
}
return null;
}
}
答案 1 :(得分:1)
你是什么意思"目前的项目"?获取特定项目总是需要某种方式来唯一识别特定的项目。
如果当前项目意味着项目是开放的,那么这不是唯一性的良好标准(在一般情况下),因为多个项目可以同时打开时间。
唯一定义项目的保证是通过获取对该项目所包含的资源的引用。例如,这可以通过编辑器输入完成,如您所述,或通过选择,greg pointed out。
如果您有项目的名称,那么您可以使用IWorkspaceRoot#getProject(String)
,但我认为情况并非如此。不过,为了完整性:
ResourcesPlugin.getWorkspace().getRoot().getProject("MyProject");
您还可以获取所有项目的列表,并迭代该列表以检查您知道项目具有的属性(或项目具有)。请参阅下面的示例。当然,这在一般情况下也不能保证唯一性,因为可以有多个项目满足标准。这就是我在示例中使用Lists的原因。
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
List<IProject> openProjects = new ArrayList<>();
List<IProject> myNatureProjects = new ArrayList<>();
for(IProject project : projects)
{
if(project.isOpen())
openProjects.add(project);
if(project.hasNature("MyNatureId")
myNatureProjects.add(project);
}