java - 为什么 IJavaProject.findPackageFragmentRoots 返回一个空数组?

标签 java eclipse eclipse-jdt eclipse-plugin

每次我调用 IJavaProject.findPackageFragmentRoots(IClasspathEntry cpe) 并传递一个 CPE_PROJECT 类型的 IClasspathEntry 时,它都会返回一个空列表。我暂停了调试器并在 Eclipse 显示 View 中运行以下行来查看发生了什么:

IClasspathEntry cpe = javaProject.getRawClasspath()[8];
cpe.toString();
    (java.lang.String) /Some Project[CPE_PROJECT][K_SOURCE][isExported:false][combine access rules:false]

// Show that the referenced project exists and has a root containing source
IClasspathEntry cpe = javaProject.getRawClasspath()[8];
IProject someProject = ResourcesPlugin.getWorkspace().getRoot().getProject(cpe.getPath().toString());
IJavaProject someJavaProject = (IJavaProject) someProject.getNature(JavaCore.NATURE_ID);
IPackageFragmentRoot pfr = someJavaProject.getPackageFragmentRoots()[0];
new Boolean(pfr.getKind() == IPackageFragmentRoot.K_SOURCE).toString();
    (java.lang.String) true

IClasspathEntry cpe = javaProject.getRawClasspath()[8];
javaProject.findPackageFragmentRoots(cpe);
    (org.eclipse.jdt.core.IPackageFragmentRoot[]) []

类路径条目是 Java 项目的类路径的一部分,它属于 CPE_PROJECT。此外,引用的 Java 项目(标题为“Some Project”)至少有一个包含源的根。根据javadoc for IJavaProject ,看来这应该至少返回一个 IPackageFragmentRoot,但它没有。

知道我在这里误解了什么吗?如何从 CPE_PROJECT 类型的 IClasspathEntry 获取 IPackageFragmentRoots 而不做一些骇人听闻的事情? (我的意思是,我可以从类路径条目中获取 IJavaProject 并遍历其原始类路径,忽略未导出的条目,以搜索 IPackageFragmentRoots。)

最佳答案

这是一个在 Eclipse 3.7 中修复的错误(参见 https://bugs.eclipse.org/bugs/show_bug.cgi?id=324367)。

根据新 API:

The result does not include package fragment roots in other projects referenced on this project's classpath.

http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/IJavaProject.html

关于java - 为什么 IJavaProject.findPackageFragmentRoots 返回一个空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3340362/

相关文章:

java - 如何从 SQLite 中的特定列获取具有特定值的行?

android - 在 DDMS 设置默认模拟位置数据

java - Eclipse插件开发: custom profiler (JDT )

java - Eclipse JDT中ActiveEditor的UndoContext

java - 赋值和泛型编译问题

java - ReSTLet - 使用路由器附加资源类时遇到问题

android - Eclipse ADT facebook 设置 - 在平台工具中定位 adb 工具

java - 没有检查规则的 CheckStyle API 使用

java - Spring Data JPA 和 QueryDSL

eclipse - 自定义 Mylyn 上下文 UI?