如何在eclipse中获取项目名称?

Ale*_*olz 14 java eclipse-plugin eclipse-rcp eclipse-gmf

如何获取当前eclipse项目的名称?我在GMF视图中,并且在使用弹出菜单的某个子菜单时需要项目名称.

Von*_*onC 25

如果您有权访问ResourcesPlugin名称,那么这个GMF类有一个简单的答案:

IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(myBundleName);
Run Code Online (Sandbox Code Playgroud)

通用答案(来自可能过时的代码)可能就像(如果您打开了一个编辑器):

IEditorPart  editorPart =
getSite().getWorkbenchWindow().getActivePage().getActiveEditor();

if(editorPart  != null)
{
    IFileEditorInput input = (IFileEditorInput)editorPart.getEditorInput() ;
    IFile file = input.getFile();
    IProject activeProject = file.getProject();
    String activeProjectName = activeProject.getName();
    //... use activeProjectName 
}
Run Code Online (Sandbox Code Playgroud)

如果没有打开编辑器:

   IViewPart [] parts =
      MyPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getViews();
    IProject activeProject = null;

    for(int i=0;i<parts.length;i++)
    {
        if(parts[i] instanceof ResourceNavigator)
        {
            ResourceNavigator navigator = (ResourceNavigator)parts[i];
            StructuredSelection sel   =
              (StructuredSelection)navigator.getTreeViewer().getSelection();
            IResource resource = (IResource)sel.getFirstElement();
            activeProject = resource.getProject();
            break;
        }
    }
    String activeProjectName = activeProject .getName();
Run Code Online (Sandbox Code Playgroud)


Ric*_*ler 7

使用选择服务将为您提供当前选定的对象,然后您可以检查选择类型并根据选择获取项目.

如果您创建ISelectionListener并在ISelectionService上注册为侦听器,则只要活动选择发生更改,您就会收到通知,并且会为选择和拥有部分提供引用.

ISelectionListener listener = new ISelectionListener() {
    public void selectionChanged(IWorkbenchPart sourcePart, ISelection selection) {
        setSourcePart(sourcePart);
        setSelection(selection);
    }
};

...
//register the listener
selectionService.addSelectionListener(listener);

...
//either get the selection service and get the selection, or use the stored version from the listener
ISelectionService selectionService = 
    Workbench.getInstance().getActiveWorkbenchWindow().getSelectionService();

ISelection selection = selectionService.getSelection();

if(selection instanceof IStructuredSelection) {
    Object element = ((IStructuredSelection)selection).getFirstElement();

    IProject project;
    if (element instanceof IResource) {
        project= ((IResource)element).getProject();
    } else if (element instanceof PackageFragmentRootContainer) {
        IJavaProject jProject = 
            ((PackageFragmentRootContainer)element).getJavaProject();
        project = jProject.getProject();
    } else if (element instanceof IJavaElement) {
        IJavaProject jProject= ((IJavaElement)element).getJavaProject();
        project = jProject.getProject();
    }
} else if (selection instanceof ITextSelection) {
    if(sourcePart instanceof JavaEditor) {
        IJavaElement element = SelectionConverter.resolveEnclosingElement(sourcePart, selection);
        project = element.getJavaProject().getProject();
    }
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅Eclipse选择服务上的这篇文章.


Min*_*nas 5

我从上面的帖子中创建了一个很好的功能,并添加了一些更新.适用于当前的日食.

public static IProject getCurrentSelectedProject() {
    IProject project = null;
    ISelectionService selectionService = 
        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();

    ISelection selection = selectionService.getSelection();

    if(selection instanceof IStructuredSelection) {
        Object element = ((IStructuredSelection)selection).getFirstElement();

        if (element instanceof IResource) {
            project= ((IResource)element).getProject();
        } else if (element instanceof PackageFragmentRoot) {
            IJavaProject jProject = 
                ((PackageFragmentRoot)element).getJavaProject();
            project = jProject.getProject();
        } else if (element instanceof IJavaElement) {
            IJavaProject jProject= ((IJavaElement)element).getJavaProject();
            project = jProject.getProject();
        }
    }
    return project;
}
Run Code Online (Sandbox Code Playgroud)