如何解决我没有编写的Eclipse插件中的依赖项?

时间:2009-09-09 21:36:45

标签: eclipse plugins eclipse-plugin

我正在尝试使用相对较新的Eclipse插件(http://uqbar-tomcat-xt.sourceforge.net/download.html)。它没有更新站点,因此我无法通过Eclipse中的UI安装它,这通常会解决依赖关系。所有可供下载的都是单个.jar,网站上的说明只是将它放在eclipse / plugins中。当我这样做时,似乎工作,从某种意义上说,我在Window中获得了新选项 - >显示插件应添加的视图。但是,当我尝试使用其中任何一个视图时,我收到以下错误:

org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: An error occurred while automatically activating bundle org.uqbar.eclipse.tomcat.xt (304).
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:125)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:449)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:211)
...snip...
Caused by: org.osgi.framework.BundleException: The activator org.uqbar.eclipse.tomcat.xt.UqbarSydeoXtActivator for bundle org.uqbar.eclipse.tomcat.xt is invalid
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:157)
...snip...
Caused by: java.lang.Error: Unresolved compilation problems: 
    The import com.thoughtworks cannot be resolved
    XStream cannot be resolved to a type
    XStream cannot be resolved to a type
    XStream cannot be resolved to a type

上述站点的依赖项页面列出了几个依赖项,包括XStream。我尝试单独下载这些.jars并将它们放入eclipse / plugins目录中,但这并没有解决错误。当我看到罐子里的清单时,我看到了:

Bundle-ClassPath: .,commons-logging-1.0.4.jar,xpp3_min-1.1.4c.jar,xstr
 eam-1.3.jar,xstream-benchmark-1.3.jar

但显然xstream jar在classpath上不可用(这是哪里?)。我不知道我可以把它们放在哪里,以便它们被插件识别。

我尝试联系开发人员并没有得到回复,所以我转向了SO。有什么我可以做的,或插件是否打包不正确?

更新:显然错误在Activator中,而不是插件本身。我尝试将插件导入为源项目,但src /目录为空。当我尝试导出插件时,插件没有出现在可用的可部署插件列表中。所以这仍然没有解决。

2 个答案:

答案 0 :(得分:2)

您可以定义一个Eclipse片段,其缺少对其类路径的依赖(通常在片段的lib目录中,并在清单中的类路径中指定)。

片段是一种特殊类型的插件,附加到目标插件。该片段在运行时与目标插件合并,因此插件中的类可以访问jar。

有关创建片段的一些指示,请参阅this question

答案 1 :(得分:1)

Rich Seller的解决方案可行,但真正的问题是一个蹩脚的插件,它在Bundle-ClassPath上指定了一堆第三方库,但实际上并没有包含它们! Bundle-ClassPath是bundle内部的类路径,因此任何引用的库都应该在bundle中。

由于包含了源代码,您可以使用缺少的依赖项(许可证允许)重新构建插件,但我认为所有这些第三方依赖项都应该是外部的 - 但这是一个完全不同的讨论如何编写OSGi包/ Eclipse插件。