Eclipse插件 - 在运行时使用错误的jar

时间:2009-06-26 11:24:43

标签: eclipse eclipse-plugin jar version eclipse-rcp

我的Eclipse插件存在严重问题..

我的插件取决于另外两个插件。所有的插件(包括我的插件)都使用Mozilla Rhino引擎 - 其中两个使用 js.jar (1.4版)。但是我的插件使用了新版本,该版本尚未发布,并且包含在 MyRhino.jar 中。

在开发过程中,一切都很顺利 - 代码完成为我提供了我特殊版本的rhino中的类和方法,没有错误等。

但是当我运行我的插件时,会使用不同版本的Rhino,我会得到类似ClassNotFoundException等运行时异常。

我如何告诉eclipse在运行时使用与开发时间相同的jar?

当我在NetBeans上开发插件时,解决方案很简单 - 将jar包装在一个单独的模块中,设置要导出的包并声明对这个新模块的依赖。 我在Eclipse中找到了simmilar解决方案,但它对我不起作用 - 虽然我声明了对包装器插件的依赖,但是即使在开发时也没有提供包和类。

我花了好几个小时处理这个问题并没有解决它,所以感谢帮助。谢谢大家。

2 个答案:

答案 0 :(得分:3)

确保您的依赖关系正确无误。如果您的代码依赖于新版本的库,那么您需要在MANIFEST.MF中指明它。例如。如果您需要捆绑org.mozilla.rhino,请指定所需的最低版本:

Require-Bundle: org.mozilla.rhino;bundle-version="1.5.0"

您的MyRhino.jar需要指定正确的版本(例如1.5.0),即使它尚未发布:

Bundle-Version: 1.5.0.qualifier

(如果MyRhino.jar尚未转换为插件,则需要手动执行:您可以使用Eclipse中的现有JAR简单地创建新的插件项目)

Alternativaly,您可以将MyRhino.jar包装到您的插件中,并删除其他插件的依赖项。为此,请使用Bundle-ClassPath(有关详细信息,请参阅http://www.aqute.biz/Blog/2007-02-19)。如果你将MyRhino.jar直接放入你的插件中,那么Bundle-ClassPath应该是:

Bundle-ClassPath: .,MyRhino.jar

答案 1 :(得分:1)

最后我已经解决了..

通过eclipse中的新项目向导创建现有jar的包装器插件很简单。但问题是向导不包含bundle classpath中的jar(正如我所料)。 Prety混淆(至少对我来说)向导只为你完成了一半的工作:/

将jar插入包装器插件包类路径后,每个都可以工作。

无论如何,感谢Peter为你的衣服提供:)