Eclipse 插件开发中的 classnotfound 问题 zz

目的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.jarlib目录下:

        <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 visibilityplugin.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 manifestdependencies选项卡中设置(因为在开发环境找不到这个plugin),而必须在plugin.xmlMANIFEST.MF文件中手工设置。plugin只要target中存在该插件,则开发和运行也不会有问题。

转载于:https://www.cnblogs.com/markjiao/archive/2008/11/28/1343362.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp.net2.0水晶报表的一些示例源码

最近关注了一下Asp.net2.0中水晶报表的资料&#xff0c;发现示例少之又少&#xff08;怀疑是水晶报表免费的比较少的缘故&#xff09;&#xff0c;搜集到了Asp.net官方的许多示例源码&#xff0c;试了几个还不错&#xff0c;这里发给大家分享一下&#xff08;我仅把Asp.net C#部…

SP2中修复IE浏览器的一些技巧

点击链接但没有反应;在开始菜单的运行对话空中输入URL&#xff0c;但不能弹出IE窗口。以上仅是用户所遇的众多问题中的两种。人们处理该问题的一个简单方法就是重新安装IE.它也确实有用&#xff0c;但你会发现重新安装IE对于这个较简单的问题到显得小题大做了。IE的许多这类问题…

Why Would I Ever

why would i ever why would i ever我怎么可能会&#xff08;那样&#xff09;why would i ever think of leaving you我怎么可能会想离开你why would i ever, why would i ever我怎么可能会&#xff08;那样&#xff09;why would i ever think of leaving you我怎么可能会想离…

我的跳槽经验

终于辞职了。从春节后偷偷摸摸找工作开始&#xff0c;到今天辞职&#xff0c;真是一段难熬的时期啊。要离开原来的公司了&#xff0c;但还是有点舍不得&#xff0c;领导同事都很优秀&#xff0c;只是每个人都有自己要辞职的原因。我这里只是写一下自己辞职的过程和想法&#xf…

计算机网络作业6,计算机网络作业 6

请回答下列问题&#xff1a;(1)主机在配置IP地址时&#xff0c;其正确的子网掩码和默认网关分别是多少&#xff1f;(2)若路由器R在向互联网转发一个由主机192.168.1.5发送、ID12345、length500B、DF1的IP分组时&#xff0c;则该IP分组首部的哪些字段会被修改&#xff1f;如何修…

QQ2007 Beta2 下载地址泄露

QQ2007 Beta2地址的地址已经泄露,来自腾讯官方论坛的一位能体验的朋友.安装完要求重启电脑,不过貌似目前非相关测试人员无法登录这个版本,当然聪明的网友们还是会自己想办法搞定 :)尊敬的QQ用户,您幸运地被腾讯公司选中参与QQ2007Beta2试用,我们很高兴有这个机会可以让小部分用…

计算机专业英语的理解,计算机专业英语之理解网络地址

理解网络地址你可以把万维网想象成一个存储在世界各地计算机上的电子文件的网络。超文本把这些资源链接在一起。统一资源定位器或者称之为URL是用来定位这些文件的地址。你只需单击一下鼠标&#xff0c;URL中包含的信息就可以让你从一个网页直接跳到另一个网页。当你在浏览器中…

区别不同浏览器,CSS hack写法

区别不同浏览器&#xff0c;CSS hack写法&#xff1a; 区别IE6与FF&#xff1a;background:orange;*background:blue; 区别IE6与IE7&#xff1a;background:green !important;background:blue; 区别IE7与FF&#xff1a;background:orange; *background:green; 区别FF&#xff0…

画江恩线

有同学问江恩线的画法。俺这次讲仔细了。希望喜欢江恩理论的同学们都可以学会了。因为讲一次很麻烦的。上图是大盘周线图的江恩线。 江恩理论的核心是用历史来发现未来。所以想学习江恩理论的同学必须明白这其中的关键。凡是没有这历史未来观的江恩理论学习都是瞎扯淡。就像缠…

计算机应用基础第二章,计算机应用基础第二章上机操作题

一、Windows XP的特点、启动和退出1、要求&#xff1a;将你的计算机转入待机状态&#xff1a;开始→关闭计算机→待机2、要求&#xff1a;重新启动你的计算机&#xff1a;开始→关闭计算机→重新启动3、要求&#xff1a;正常退出Windows XP系统&#xff1a;开始→关闭计算机→关…

Javascript 仿Flash 图片切换 及 Flash 图片切换

1。 Javascript 仿Flash 图片切换 http://www.fansart.com/cweb/200669141456.asp<a target_self href"javascript:goUrl()"><span class"f14b"><script type"text/javascript">imgUrl1"http://www.fansart.com/qiehuan/…

nginx热加载、热升级、回滚

修改完配置文件后使用 nginx -s reload 命令进行热加载 编译好新的 nginx 二进制文件后&#xff0c;运行nginx 开启nginx服务&#xff0c;然后使用 kill -USR2 新的nginx_master_pid 切换到新开启的master进程 回退的话同理使用 kill -USR2 旧的nginx_master_pid 转载于:https:…

计算机领域hpec会议,2018 IEEE High Performance extreme Computing Conference HPEC

The IEEE High Performance Extreme Computing Conference (HPEC ’18) will be held in the Greater Boston Area, Massachusetts, USA on 25 – 27 September 2018. The HPEC charter is to be the premier conference in the world on the confluence of HPC and Embedded …

sohu读博——周忆清

打开Sohu的IT博客群http://blog.sohu.com/it/的时候&#xff0c;看到排行第一位的就是周忆清&#xff08;http://monalisasmile.blog.sohu.com/&#xff09;。这是何方高人啊&#xff1f;带着好奇心&#xff0c;就点了一下。看了一下博客内容&#xff0c;顿时产生一种敬意&…

计算机学校的奖项,2017年度国家科学技术奖各奖项公示

国家科学技术奖励工作办公室公告第86号2017年度国家科学技术奖推荐工作已经结束&#xff0c;我办共收到有关单位和专家推荐的国家自然科学奖项目209项&#xff0c;技术发明奖项目261项(通用项目211项&#xff0c;专用项目50项)&#xff0c;科学技术进步奖项目603项(通用项目487…

沈阳职业计算机学院宿舍几人间,沈阳工学院宿舍怎么样 住宿条件好不好

沈阳工学院宿舍怎么样 住宿条件好不好2018-06-21 17:01:17文/李铭大学宿舍是我们的第二个家&#xff0c;大学生活一天之中最少要有三分之二的时间在宿舍中度过&#xff0c;所以说&#xff0c;和谐融洽的寝室关系和良好的宿舍环境可以让我们愉快的度过四年大学生活。沈阳工学院宿…

知识_ARM

ARM ARM学习从Datasheet&#xff08;数据表&#xff09;User_Manual&#xff08;用户手册&#xff09;下手 平台&#xff1a; 全志A64 Datasheet&#xff08;数据表&#xff09; 修订历史声明目录概观特征   ———CPU架构   ———GPU架构   ———内存子系统   …

[你必须知道的.NET] 第五回:深入浅出关键字---把new说透(转载)

[你必须知道的.NET] 第五回&#xff1a;深入浅出关键字---把new说透 作者&#xff1a;Anytao 本文将介绍以下内容&#xff1a; 面向对象基本概念 new关键字深入浅出 对象创建的内存管理 1. 引言 园子里好像没有或者很少把new关键字拿出来说的&#xff0c;那我就占个先机吧&a…

ap测试系统软件,符合AUTOSAR(APCP)的嵌入式系统和软件设计工具

AUTOSAR Builder功能介绍AUTOSAR Builder 是达索旗下一款基于 Eclipse 的开放、可扩展工具套件&#xff0c;用于设计和开发符合 AUTOSAR 标准的系统和软件。新版本2020x支持AUTOSAR Classic 4.4.0及AUTOSAR Adaptive R19-03。图1 AUTOSAR Builder工具主界面AUTOSAR Authoring …

开发手记之实现web.config的快速配置(转载)

开发手记之实现web.config的快速配置 开发手记之实现web.config的快速配置 作者&#xff1a;Anytao 问题简述&#xff1a; 在Web开发中&#xff0c;对web.cofig进行配置是非技术人员无法胜任的工作&#xff0c;但是常常需要由客户自己来进行简单配置的时候&#xff0c;需要提…