Eclipse插件开发中对于外部Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)
来源:互联网 发布:js获取div的title 编辑:程序博客网 时间:2024/05/22 00:21
目的:Eclipse插件开发中,经常要引用第三方包或者是引用其他插件中的类,由于插件开发环境引用类路径的设置和运行平台引用类路径的设置不同,经常导致开发过程OK,一旦运行则出现NoClassDefFoundError的问题。本文的目的是全面分析各种情况下类路径的设置,以避免这个问题的出现。
说明:Jar包和类路径实际上是一个概念,比如类com.bbebfe.Test.class打包为test.jar包,添加类引用就直接添加test.jar包。而如果是添加类文件路径,则添加包目录的上级目录,比如lib/com/bbebfe/Test.class,则添加lib文件夹,而不是com文件夹。在此后的例子中都只说明Jar包的形式。
分析:Eclipse插件开发对于Jar包的引用主要有三种原因:
1. 插件引用第三方包(普通的jar包或者类文件,不是插件)。
a) 开发环境引用配置,在prject -> properties -> Java build path中设置。
b) 运行环境引用配置,在plugin manifest编辑器的Runtime选项卡下的classpath中添加tset.jar包的引用(在MANIFEST.MF中表现为Bundle-ClassPath: lib/test.jar, 在plugin.xml表现为<runtime>节下的引用
i. 类文件在lib目录下,如下的设置导出lib目录下所有目录:
<runtime>
<library name="lib/">
<export name="*"/>
</library>
</runtime>
ii. test.jar在lib目录下:
<runtime>
<library name="lib/test.jar">
<export name="*"/>
</library>
</runtime>
iii. 实际上上面的设置可以简化为:
<runtime>
<library name="lib/"/>
</runtime>
或者
<runtime>
<library name="lib/test.jar"/>
</runtime>
默认即导出lib目录下的所有包和jar下的所有包
实际上,执行b)项设置后,会自动执行a)项设置,使开发环境和运行环境同时有效。
2. 插件B引用插件工程A(非Eclipse插件,而是自己另外一个插件项目中的类)
a) 首先必须将A中的B需要的类暴露(export)出来
i. 如果有MANIFEST.MF文件,则表现为plugin manifest编辑器中runtime节的exported packages,通过这里添加需要export的包。在manifest.mf文件中是Export-Package: com.bbebfe
ii. 如果只有plugin.xml,则表现为plugin manifest编辑器中runtime节的library visibility。在plugin.xml文件中表现为
<runtime>
<library>
<export name=”com.bbebfe.*”/>
...
b) 在B插件工程的plugin manifest编辑器中的dependencies选项卡中添加对A插件的引用(这要求运行对话框中的plugins列表的workspace plugins中必须包含A插件)。
c) 如果B工程是一个RCP工程,则必须在product编辑器的configuration选项卡中包含A插件工程。
3. 插件B引用Eclipse插件A的类。
a) Eclipse插件中的类都是Exported,因此这步省略。
b) 在B插件工程的plugin manifest编辑器中的dependencies选项卡中添加对A插件的引用(这要求preferences -> plugin development -> target目标平台必须包含A插件,且运行对话框的plugins列表中的target platform中必须选中A插件)。
总结:如果B插件引用的A也是一个插件,则A必须出现在B插件的plugin dependencies引用中,而不是其他地方,否则肯定会出现运行时NoClassDefFoundError问题(因此必须在plugin manifest编辑器的dependencies选项卡下进行设置)。而且只需要在这里设置的设置对开发环境和运行环境同时有效)
注意:还有一种情况就是开发环境没有某个包或者插件,而只在运行环境(target)中存在,此时就必须设置正确的target,然后按照正常程序添加插件引用,但此时已经不能在plugin manifest的dependencies选项卡中设置(因为在开发环境找不到这个plugin),而必须在plugin.xml或MANIFEST.MF文件中手工设置。plugin只要target中存在该插件,则开发和运行也不会有问题。
- Eclipse插件开发中对于Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)
- Eclipse插件开发中对于Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)
- Eclipse插件开发中对于外部Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)
- eclipse插件开发中对于jar包和类文件引用的处理(彻底解决插件开发中的noclassdeffounde
- Eclipse插件开发 添加外部jar包
- Eclipse插件开发引用外部包
- rcp(插件开发)插件B需要引用插件A中的jar包-如何处理依赖关系
- Eclipse插件(Plugin)开发中的NoClassDefFoundError的解决。
- 插件开发如何导入外部jar包
- rcp(插件开发)引入第三方jar包,报 NoClassDefFoundError 错误的解决方案
- ionic3 自定义插件的开发和调用(包含jar包调用,文件结构详解)
- Eclipse插件(Plugin)开发中的NoClassDefFoundError的解决(2)
- Eclipse插件开发:Eclipse中的图片资源管理(引用)
- 将eclipse java程序打包成jar的总结(包括工程中没有引用外部jar包和有引用外部jar包两种情况)
- 将eclipse java程序打包成jar的总结(包括工程中没有引用外部jar包和有引用外部jar包两种情况)
- 【eclipse插件开发实战】Eclipse插件开发7——插件发布jar包
- Eclipse插件开发中的异常处理?
- Eclipse 插件开发java.lang.NoClassDefFoundError
- 赣鄱生香逐浪来-Zoomla!逐浪CMS闪亮首届江西网站开发与研讨大会
- C语言常用文件处理函数
- linux下wget的用法
- 理解HTTP消息头
- 在两个SQL Server数据库之间复制对象
- Eclipse插件开发中对于外部Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)
- Unicode解决方案ICU
- .NET Compact Framework下SQL CE的使用
- 婚礼上可用的 八荣八耻(大全)
- 中国软件架构师语录
- HTTP协议返回状态码表
- 关于ajax
- 用VBScript写合并文本文件的脚本
- SqlCe事务