当前位置: 首页 > news >正文

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

 

相关文章:

  • ecos启动流程分析
  • Android 九宫格密码锁进入程序
  • 泛型通配符?的使用
  • 通过JAVA反射修改JDK1.6*当中DNS缓存内容
  • 开发人员拒绝写技术博客的几个理由
  • 制作网线
  • 基于单决策树的AdaBoost
  • 【SICP练习】53 练习2.21
  • php 基础算法(用*表示金字塔)通过hash 比較两个数组同样的数
  • sass带来的变革
  • QlikView ETL - 分隔字符串的方法 SubField
  • 微软职位内部推荐-Senior Development Lead
  • WSS(Windows Storage Server)2008R2使用指南(二)安装篇
  • javascript——DOM之元素的宽高
  • 【原创】开源Math.NET基础数学类库使用(08)C#进行数值积分
  • (三)从jvm层面了解线程的启动和停止
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • canvas 高仿 Apple Watch 表盘
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CAP 一致性协议及应用解析
  • css系列之关于字体的事
  • ES10 特性的完整指南
  • js 实现textarea输入字数提示
  • 从零搭建Koa2 Server
  • 翻译--Thinking in React
  • 排序算法学习笔记
  • 深入浏览器事件循环的本质
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 数组的操作
  • 通信类
  • 7行Python代码的人脸识别
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #laravel 通过手动安装依赖PHPExcel#
  • #NOIP 2014#Day.2 T3 解方程
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (09)Hive——CTE 公共表达式
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (九)One-Wire总线-DS18B20
  • (十一)图像的罗伯特梯度锐化
  • (推荐)叮当——中文语音对话机器人
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)原始图像数据和PDF中的图像数据
  • .NET BackgroundWorker
  • .Net6 Api Swagger配置
  • .net和php怎么连接,php和apache之间如何连接
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [ C++ ] STL---string类的模拟实现
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600