Eclipse插件引入jar包的方法(转)
搞了两天,终于找到解决办法了。原来 Eclipse 插件项目引入外面的jar包不能用 build path---->add external jars的方法。
先说明两个概念:类加载器,OSGI
类加载器(class loader),顾名思义就是JVM用于加载类的一个工具。当然,它本身也是一个java类,见java.lang.ClassLoader。它维护内部的类名空间,相互关系(域),并为它们隔绝外部侵害。
OSGI,Open Service Gateway Initiative,则是一个开放的架构,主要特性包括热插拔,bundle独立等。现版本的eclipse就是基于这个架构实现的,而eclipse实现OSGI主要途径,就是通过为每个bundle分配一个独立的classloader,然后使用MANIFEST.MF文件的配置,来维护这些bundle之间的关系。
比如一行代码:
Platform.getBundle(BUNDLE_ID)
这就是获得BUNDLE_ID的classloader的途径,通过它来调用bundle(插件)里面的类的方式和反射调用的方式一致。
正题:
如何在一个插件里引用jar包?有一些新学eclipse插件开发的朋友,往往会把需要用到的jar包添加到项目的运行环境里面,这种做法虽然在eclipse编辑器编辑的时候不会出现问题,但一旦运行程序,就难免出现无法初始化类,或者找不到类的情况。
这就是因为,各bundle间的classloader是独立的,在项目运行时添加的jar包,并没有加载到本bundle的classloader中来,当然就会出现这种错误了。
两种方案解决这个问题(本文使用的是eclipse 3.7):
1、如果一个jar包的使用范围仅在本插件内部,那么可以在MANIFEST.MF中选择runtime签页,找到classpath区域,如图:

点击“Add”按钮,弹出如下对话框:

在这里选择你要添加的jar包即可。
注意!add向导里显示的文件、文件夹只有本插件下的内容,所以,你需要创建一个“lib”文件夹,把需要的jar放置在其下(文件夹命名为lib是约定俗成的做法,如非必要,勿标新立异)。
2、如果一个jar包需要被多个插件引用,方案1就显得麻烦了。可以采用jar包插件化的方法来实现公用的jar引用。
快捷键ctrl+N创建新"others",选择

接下来按提示操作即可,这样就生成了一个jar包插件。在你需要的位置依赖它即可。
-------------------------
3、虽然只列了两点,但其实还是有方式三的。即是结合上两点,首先在classpath中引用jar包,然后在export package中开放这些jar包。然后在需要的插件里依赖前插件,即可。这样配置相对灵活一点。
http://www.cnblogs.com/wangjiyuan/p/jar.html
Eclipse插件引入jar包的方法(转)的更多相关文章
- Eclipse插件引入jar包的方法
搞了两天,终于找到解决办法了.原来 Eclipse 插件项目引入外面的jar包不能用 build path---->add external jars的方法. 先说明两个概念:类加载器,O ...
- Maven工程引入jar包
Maven项目引入jar包的方法 法一.手动导入:项目右键—>Build Path—>Configure Build Path—>选中Libraries—>点击Add Exte ...
- Maven工程引入jar包(转)
Maven项目引入jar包的方法,希望能帮助有需要的朋友们 法一.手动导入:项目右键—>Build Path—>Configure Build Path—>选中Libraries—& ...
- Eclipse引入jar包的三种方式
引用自 http://chenxu.wo.blog.163.com/blog/static/50239687201162310620634/ 使用Eclipse开发应用程序,少不了使用第三方jar包, ...
- eclipse javaWeb项目如何引入jar包
eclipse javaWeb项目如何引入jar包 CreateTime--2018年4月19日08:54:24 Author:Marydon 1.判断当前jar包是否已经引入到项目当中的3种方式 ...
- 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...
- Eclipse中的工程引入jar包后没有整合到一个文件夹而是全部在根目录下显示
Eclipse中的工程引入jar包后没有整合到一个文件夹而是全部在根目录下显示 解决方案: 1,在Eclipse中,点击window-->Preferences-->Java-->B ...
- 【eclipse插件开发实战】Eclipse插件开发7——插件发布jar包
Eclipse插件开发7--插件发布jar包 最省事的方式就是直接导出jar包,然后放到eclipse的plugins目录下,重启eclipse即可. step1: 对需要打包的插件工程右击→导出(E ...
- 【Java_SSM】(四)Eclipse中通过maven引入jar包
这篇博文我们介绍一下如何通过eclipse配置setting并引入jar包 (1)eclipse:Window--Preferences--Maven--User Setting 全部完成后点Appl ...
随机推荐
- android内存的一点优化
android手机给应用分配的内存通常是8兆左右,如果处理内存处理不当很容易造成OutOfMemoryError,我们的产品出现最多的错误也是OutOfMemoryError的异常, 在解决这个异常时 ...
- MFC对话框Style说明
Popup:弹出窗口 Overlapped:重叠窗口 Child:子窗口 在它们之间并没有太多内在的差异,但是使用不同的窗口风格,它们的外观是 不同的. 重叠窗口通常用于建立应用程序主窗口.事实上,有 ...
- Win32 进程间通信的分析与比较(13种方法)
1 进程与进程通信 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码.数据以及它可利用的系统资源(如文件.管道等)组成.多进程/多线 程是Windows操作系统的一个基本特征.M ...
- __autoload()方法
php中__autoload()方法详解 PHP在魔术函数__autoload()方法出现以前,如果你要在一个程序文件中实例化100个对象,那么你必须用include或者require包含进来100个 ...
- 怎样制作一个相似Tiny Wings的游戏 Cocos2d-x 2.1.4
在第一篇<怎样使用CCRenderTexture创建动态纹理>基础上,添加�创建动态山丘,原文<How To Create A Game Like Tiny Wings with C ...
- iOS技术开发-人机交互指南之UI设计基础:iOS App Anatomy
第二篇更多的是从技术的角度对iOS界面组成原理进行了简单的解析,篇幅很短,可稍作了解:更多关于iOS开发入门的内容可参考“设计师应该了解的iOS应用开发基础知识”一文.另外,非常感谢各位朋友在微博上的 ...
- ASP.NET - 使用 XML
对XML文件进行简单的增加,删除,修改,查看等功能. XML代码: <?xml version="1.0" encoding="UTF-8"?> & ...
- EDStarRating(IOS星级评定)
链接地址:https://github.com/erndev/EDStarRating EDStarRating
- Expert for SQL Server 诊断系列
Expert for SQL Server 诊断系列 Expert 诊断优化系列------------------锁是个大角色 前面几篇已经陆续从服务器的几个大块讲述了SQL SERVER数据库 ...
- WCF消息之XmlDictionaryWriter
原文:WCF消息之XmlDictionaryWriter XmlDictionaryWriter,是一个抽象类,从该类中派生了WCF,以便执行序列化和反序列化. 它有4种格式书写器: CreateBi ...