org.eclipse.jdt.core.JavaCore 的创建方法总是返回 null

org.eclipse.jdt.core.JavaCore's create method always returning null

我花了两天多的时间来调查这个问题,但不幸的是它没有解决。

我的问题

我正在编写一个程序(osgi 包)以获取 IJavaProject 对象以获取 java 文件的 ICompilationUnits 以查看 eclipse 提出的建议。

我卡住的地方

我的 IJavaProject 引用总是为空。我尝试了各种组合。

// Sample is a Java Project I created separately with one Test file, I also accessed this project in which I am coding but its a plugin
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("Sample"); 
System.out.println(project.getLocation()); // prints absolute path
IProjectNatureDescriptor[] nids = project.getWorkspace().getNatureDescriptors();
for (int i = 0; i < nids.length; i++) {
    System.out.println(nids[i].getNatureId()); // prints all natures associated to IProject
}

System.out.println(project.getWorkspace().validateNatureSet(project.getDescription().getNatureIds()).isOK()); // print true

if (project.isOpen()){
    System.out.println(project.hasNature(JavaCore.NATURE_ID)); // prints true
}

final  IJavaProject javaProject = JavaCore.create(project);
System.out.println("jp=null ?? ====="+(javaProject==null)); // this prints false , I am amazed
System.out.println("jp=null ?? ====="+(javaProject==null)); // throws Null pointer exception

........

此外, 在此之前,在我的项目中存在链接错误,因为我从我的库中提供了 jar,而 eclipse 也提供了。通过从我的库中排除几个罐子使它起作用。

任何人都可以帮助我为什么总是空指针。我在这里做错了什么?

异常跟踪

java.lang.NullPointerException
    at org.eclipse.jdt.internal.core.JavaModelManager.getInfo(JavaModelManager.java:1577)
    at org.eclipse.jdt.internal.core.Openable.isOpen(Openable.java:376)
    at org.MYPACKAGE.manager.RoasterTransformManager.execute(RoasterTransformManager.java:73)
    at org.MYPACKAGE.manager.TransformManager.transform(TransformManager.java:39)
    at org.MYPACKAGE.Transform.performTransform(Transform.java:46)
    at org.MYPACKAGE.Transform.begin(Transform.java:56)
    at org.MYPACKAGE.Activator.start(Activator.java:22)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.run(BundleContextImpl.java:771)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.run(BundleContextImpl.java:1)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:764)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:721)
    at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:941)
    at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:318)
    at org.eclipse.osgi.container.Module.doStart(Module.java:571)
    at org.eclipse.osgi.container.Module.start(Module.java:439)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1562)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)

Whosebug 是我的幸运。大多数时候,当我长期以来一直在为问题而苦苦挣扎并发布我的问题时,它很快就解决了。

我在 eclipse 的错误论坛中查找,我发现了这个 https://bugs.eclipse.org/bugs/show_bug.cgi?id=75969

根据这个,如果项目的 lib 文件夹中有某些 jar,它将无法工作。您需要将它们定义为依赖插件列表,并从 eclipse\plugins 而不是 lib 中获取它们。这发生在我的例子中。

如果你们中有人知道如何在不涉及 eclipse 的情况下创建无头环境,即使用命令行,请告诉我。现在我正在获取 IJavaProject 的对象。

谢谢