在可以解析Eclipse IJavaProject的类路径时收到通知

时间:2015-04-03 09:52:02

标签: java eclipse eclipse-plugin

我正在开发一个Eclipse插件,它在启动时需要遍历工作区中的所有打开的Java项目,获取每个解析的类路径并使用它做一些事情。到目前为止我的代码看起来像这样:

public void start(BundleContext context) throws Exception {
    for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
        if (project.isOpen() && project.getNature(JavaCore.NATURE_ID) != null) {
            IJavaProject javaProject = JavaCore.create(project);
            for (IClasspathEntry cpe : javaProject.getResolvedClasspath(true)) {
                // Do something with cpe
            }
        }
    }
}

问题是,对于工作空间IJavaProject.getResolvedClasspath(true)中的某些项目,最初会返回一个空的类路径。我的猜测是那些项目还没有满载。

我还有一个IResourceChangeListener,它监听项目的开启/关闭,并且与启动时的操作完全相同。当我关闭并重新打开一个最初有一个空类路径IJavaProject.getResolvedClasspath(true)的项目时,它将返回预期的类路径。

我的假设是否正确,那些项目尚未满载?我应该如何重新设计它以在启动插件时为所有Java项目获取正确的解析类路径?

1 个答案:

答案 0 :(得分:0)

从Eclipse JDT源代码中自行计算出来。如果类路径正由另一个线程解析,IJavaProject.getResolvedClasspath(boolean)确实可以返回一个空的类路径。在尝试获取项目的已解析类路径之前添加对JavaCore.initializeAfterLoad(IProgressMonitor)的调用似乎可以解决问题。