Eclipse插件开发中IContainer.findMember方法返回null问题求助
问题根因
Eclipse 工作区根节点 IWorkspaceRoot 的直接子节点是项目(IProject),而非项目内的文件夹/包。你传入的路径 /demo_package 是直接从工作区根查找同名资源,而你的 demo_package 实际是存放在某个项目的源码目录下,路径层级不匹配,自然返回 null。
修复方案
你需要补全资源的完整层级路径,Eclipse 工作区资源的完整绝对路径格式为:/[项目名]/[源码目录名]/[包路径],比如你的包在 demo_project 项目的 src 目录下,完整路径就是 /demo_project/src/demo_package。
场景1:已知当前操作的项目,从项目出发查找(更推荐,兼容性更好)
// 假设你已经获取到当前操作的项目对象 IProject project // 先获取源码目录,如果你用的是maven多模块等结构,替换成对应的源码目录路径 IFolder srcFolder = project.getFolder("src"); // 从源码目录出发查找包 IResource packageContainer = srcFolder.findMember("demo_package");
场景2:直接用绝对路径查找
// 替换路径中的「你的项目名」为实际项目名称 String locationString="/你的项目名/src/demo_package"; IPath path = new Path(locationString); IResource container = ResourcesPlugin.getWorkspace().getRoot().findMember(path);
额外优化建议
如果你开发的是Java相关的插件,建议直接使用JDT提供的Java模型API查找包,比直接操作通用资源API更稳定,不会受源码目录配置变更影响:
// 先将普通项目转为Java项目对象 IJavaProject javaProject = JavaCore.create(project); // 直接查找对应包 IPackageFragment demoPackage = javaProject.findPackageFragment(new Path("demo_package"));
注意:操作前确保对应的文件夹已经被Eclipse同步到工作区,也就是在项目资源管理器中可见,没有被设置为排除资源。
内容的提问来源于stack exchange,提问作者Jarutir
相关产品推荐
相关产品推荐

