【问题标题】:How to get the project name in eclipse?如何在eclipse中获取项目名称?
【发布时间】:2010-11-15 10:04:52
【问题描述】:

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

【问题讨论】:

    标签: java eclipse-plugin eclipse-rcp eclipse-gmf


    【解决方案1】:

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

    IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(myBundleName);
    

    通用答案(来自potentially outdated code)可能是(如果您打开了编辑器):

    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 
    }
    

    如果没有打开编辑器:

       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();
    

    【讨论】:

    • 对于 GMF,将 MyPlugin 部分更改为:IViewPart[] parts = {yourPluginName}DiagramEditorPlugin.getInstance().getWorkbench().getActiveWorkbenchWindow().getActivePage().getViews(); 您的 GMF 插件名称可以在您的 .genmodel 中找到。
    【解决方案2】:

    使用选择服务会给您当前选择的对象,然后您可以检查选择类型并根据选择获取项目。

    如果您创建 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();
        }
    }
    

    查看article on the Eclipse selection service了解更多详情。

    【讨论】:

    • 可能比我的答案更准确。 +1
    • +1 但最好使用 PlatformUI.getWorkbench() 而不是 Workbench.getInstance()。
    【解决方案3】:

    我从上面的帖子中创建了一个不错的函数,并添加了一些更新。适用于当前的 Eclipse。

    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;
    }
    

    【讨论】:

      【解决方案4】:

      Rich Seller 和 VonC 都提供了很好的答案,但它们似乎不够完整/没有使用内部类。我想出了以下内容。

      @Override
      public void createPartControl(Composite parent)
      {
        ....
      
        // Register to be notified about selections
        getSite().getWorkbenchWindow().getSelectionService()
            .addPostSelectionListener(this);
      
        // Detect the current selection
        detectCurrentSelection();
      }
      
      @Override
      public void selectionChanged(IWorkbenchPart part, ISelection selection)
      {
        IProject project = convertSelection(part, selection);
        setProject(project);
      }
      
      private void detectCurrentSelection()
      {
        IProject project = null;
      
        IWorkbenchWindow window = getSite().getWorkbenchWindow();
        IWorkbenchPage activePage = window.getActivePage();
      
        if (activePage != null)
        {
          IEditorPart part = activePage.getActiveEditor();
      
          if (part != null)
          {
            project = convertSelection(part);
          }
          else
          {
            IViewReference[] viewReferences = activePage.getViewReferences();
      
            for (IViewReference viewRef : viewReferences)
            {
              IViewPart view = viewRef.getView(false);
              ISelection selection = null;
      
              if (view instanceof IPackagesViewPart)
              {
                IPackagesViewPart viewPart = (IPackagesViewPart) view;
                TreeViewer treeViewer = viewPart.getTreeViewer();
                selection = treeViewer.getSelection();
              }
              else if (view instanceof CommonNavigator)
              {
                CommonNavigator navigator = (CommonNavigator) view;
                CommonViewer commonViewer = navigator.getCommonViewer();
                selection = commonViewer.getSelection();
              }
      
              if (selection instanceof IStructuredSelection)
              {
                IStructuredSelection structuredSelection = (IStructuredSelection) selection;
      
                project = convertSelection(structuredSelection);
      
                if (project != null)
                  break;
              }
            }
          }
        }
      
        setProject(project);
      }
      
      private IProject convertSelection(IWorkbenchPart part, ISelection selection)
      {
        IProject project = null;
        if (selection instanceof IStructuredSelection)
        {
          IStructuredSelection structuredSelection = (IStructuredSelection) selection;
          project = convertSelection(structuredSelection);
        }
        else if (selection instanceof ITextSelection)
        {
          if (part instanceof IEditorPart)
          {
            IEditorPart editorPart = (IEditorPart) part;
            IResource resource = (IResource)editorPart.getEditorInput().getAdapter(IResource.class);
            if (resource != null)
            {
              project = resource.getProject();
            }
          }
        }
      
        return project;
      }
      
      private IProject convertSelection(IEditorPart part)
      {
        IProject project = null;
        IResource resource = (IResource)part.getEditorInput().getAdapter(IResource.class);
        if (resource != null)
        {
          project = resource.getProject();
        }
        return project;
      }
      
      private IProject convertSelection(IStructuredSelection structuredSelection)
      {
        IProject project = null;
        Object element = structuredSelection.getFirstElement();
      
        if (element instanceof IResource)
        {
          project = ((IResource) element).getProject();
        }
        else if (element instanceof IJavaElement)
        {
          IJavaElement javaElement = (IJavaElement) element;
          project = javaElement.getJavaProject().getProject();
        }
        else if (element instanceof IAdaptable)
        {
          IAdaptable adaptable = (IAdaptable) element;
          IWorkbenchAdapter adapter = (IWorkbenchAdapter) adaptable.getAdapter(IWorkbenchAdapter.class);
          if (adapter != null)
          {
            Object parent = adapter.getParent(adaptable);
            if (parent instanceof IJavaProject)
            {
              IJavaProject javaProject = (IJavaProject) parent;
              project = javaProject.getProject();
            }
          }
        }
      
        return project;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-04
        • 2012-05-12
        • 2023-03-05
        • 2019-11-23
        • 2014-08-17
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        相关资源
        最近更新 更多