zoukankan      html  css  js  c++  java
  • 关于RCP引用jar包的几个问题。

    先说明两个概念:类加载器,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包。然后在需要的插件里依赖前插件,即可。这样配置相对灵活一点。

  • 相关阅读:
    171. Excel Sheet Column Number (Easy)
    349. Intersection of Two Arrays (Easy)
    453. Minimum Moves to Equal Array Elements (Easy)
    657. Judge Route Circle (Easy)
    CSS笔记
    保存页面状态
    UI开发总结
    ubuntu 下配置munin
    反向代理配置
    JavaScript 高级程序设计第二版
  • 原文地址:https://www.cnblogs.com/anrainie/p/2398375.html
Copyright © 2011-2022 走看看