无法解析模块:org.eclipse.cdt.launch.remote

时间:2013-12-04 15:39:26

标签: eclipse-plugin osgi eclipse-cdt abstract-syntax-tree

我正在尝试使用eclipse的CDT为某些cpp文件生成AST。我按照此处给出的说明进行操作:http://wiki.eclipse.org/images/c/c7/CDT_APIs_for_code_introspection.pdf

然而,我遇到了一个错误说:

Exception in thread "main" java.lang.IllegalStateException: Workspace is closed.
at org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:399)
at etl.CppParser.Parser(CppParser.java:23)**

在谷歌搜索了一段时间后,我明白为了访问工作区中的项目(使用ResourcesPlugin.getWorkspace().getRoot().getFile(path);),项目应该是一个插件项目,但我的项目是一个简单的Java项目。

因此,我开始在eclipse中开发一个插件项目。我创建了一个目标平台,我添加了项目所需的所有必需的插件依赖项。但是当我将插件项目作为 Eclipse应用程序运行时,我仍然遇到问题。这是确切的错误:

!ENTRY org.eclipse.cdt.launch.remote 4 0 2013-11-30 01:43:27.379
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: Could not resolve module: org.eclipse.cdt.launch.remote [300]
  Unresolved requirement: osgi.wiring.bundle; filter:="(&(osgi.wiring.bundle=org.eclipse.rse.ui)(&(bundle-version>=3.0.0)(!(bundle-version>=4.0.0))))"
    at org.eclipse.osgi.container.Module.start(Module.java:424)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1530)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1509)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1481)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1424)
    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)
Caused by: org.osgi.service.resolver.ResolutionException: Unable to resolve osgi.identity; osgi.identity="org.eclipse.cdt.launch.remote"; type="osgi.bundle"; version:Version="2.4.0.201309180223"; singleton:="true": missing requirement osgi.wiring.bundle; filter:="(&(osgi.wiring.bundle=org.eclipse.rse.ui)(&(bundle-version>=3.0.0)(!(bundle-version>=4.0.0))))"
    at org.apache.felix.resolver.Candidates.populateResource(Candidates.java:285)
    at org.apache.felix.resolver.Candidates.populate(Candidates.java:153)
    at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:147)
    at org.eclipse.osgi.container.ModuleResolver$ResolveProcess.resolve(ModuleResolver.java:652)
    at org.eclipse.osgi.container.ModuleResolver.resolveDelta(ModuleResolver.java:75)
    at org.eclipse.osgi.container.ModuleContainer.resolveAndApply(ModuleContainer.java:454)
    at org.eclipse.osgi.container.ModuleContainer.resolve(ModuleContainer.java:412)
    at org.eclipse.osgi.container.ModuleContainer.resolve(ModuleContainer.java:402)
    at org.eclipse.osgi.container.Module.start(Module.java:406)
    ... 7 more
Root exception:
org.osgi.service.resolver.ResolutionException: Unable to resolve osgi.identity; osgi.identity="org.eclipse.cdt.launch.remote"; type="osgi.bundle"; version:Version="2.4.0.201309180223"; singleton:="true": missing requirement osgi.wiring.bundle; filter:="(&(osgi.wiring.bundle=org.eclipse.rse.ui)(&(bundle-version>=3.0.0)(!(bundle-version>=4.0.0))))"
    at org.apache.felix.resolver.Candidates.populateResource(Candidates.java:285)
    at org.apache.felix.resolver.Candidates.populate(Candidates.java:153)
    at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:147)
    at org.eclipse.osgi.container.ModuleResolver$ResolveProcess.resolve(ModuleResolver.java:652)
    at org.eclipse.osgi.container.ModuleResolver.resolveDelta(ModuleResolver.java:75)
    at org.eclipse.osgi.container.ModuleContainer.resolveAndApply(ModuleContainer.java:454)
    at org.eclipse.osgi.container.ModuleContainer.resolve(ModuleContainer.java:412)
    at org.eclipse.osgi.container.ModuleContainer.resolve(ModuleContainer.java:402)
    at org.eclipse.osgi.container.Module.start(Module.java:406)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1530)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1509)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1481)
    at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1424)
    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)

有人可以告诉我我能做些什么来摆脱这个问题......我现在无法理解问题是什么。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

好的,我自己解决了这个问题。我做了如下:我找到了目标管理相关下载的链接,我下载了RSE运行时3.2.2(它是> = 3和< 4)

http://download.eclipse.org/tm/downloads/

然后我去了Eclipse Windows-> Preferences-> Plugin Development-> Target Platform,然后选择了我的Target Platform-> Edit-> Add->目录并添加通过解压缩下载的RSE运行时3.2.2.zip获得的目录。

在此之后,当我作为Eclipse应用程序运行插件项目时,我不再有任何错误,因为现在,我的插件项目使用的插件没有任何未解析的依赖项。

我希望这有助于某人。

答案 1 :(得分:0)

错误说bundle org.eclipse.cdt.launch.remote有一个Require-Bundle(osgi.wiring.bundle)语句,它列出了bundle org.eclipse.rse.ui和bundle版本范围[3.0,4.0] 。所以org.eclipse.cdt.launch.remote无法解析,因为它依赖于捆绑包org.eclipse.rse.ui,它具有捆绑版本> = 3和< 4。

答案 2 :(得分:-1)

13.2.6。从产品中的功能中删除版本依赖性

这是对第一个答案的引用,该答案声称错误是由产品插件依赖于版本引起的。设置层次结构有点棘手。在为产品添加依赖项时,将自动加载该版本。如果在解析插件时传递了该版本,那么您的产品将仅适用于您导入的版本。如果版本被删除,那么您的产品将成功提取最新的插件版本,这是更加动态和可取的,以确保您的应用程序未来的开发稳定性。

原始问题时,本教程和当前功能可能不存在。问题可以合并到改进CDT和RCP。

http://www.vogella.com/tutorials/EclipseRCP/article.html#introduction-to-eclipse-rcp-applications

在您的name.product项目中打开产品。导航到“内容”选项卡。单击每个列出的功能以突出显示单击属性。手动删除版本,使该字段为空。对产品中列出的每个功能执行此操作。单击“确定”。保存。运行