`
min12605
  • 浏览: 54757 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何在Eclipse RCP中使用第三方包(图)

阅读更多

这两天一直被在Eclipse插件项目中导入第三方包的问题所困扰啊,我在项目中使用了dom4j的第三方包,可是在插件运行是一直报“noClassDefFound”的错误,在网上找了些文档解决的方式也不明了,这篇文章图文并茂,适合我这个初学者,所以转过来了。

 

另外,好像这种方法在往其他人的机器上发布时还得从新配路径(看到有人提出这个问题,自己还没实验:P)。还有人提出可以把导入的第三方包做成插件,直接在depends里面添加插件引用即可。(这个方法我试了,但是有不少错误,还得在试试,也欢迎有成功者介绍经验啊!)

 

 

我们拿一个简单的示例来说明,这个示例使用的是eclipse rcp的template中最简单的一个,也就是大家都见过的Hello,RCP。我用的eclipse版本是3.2M2。
  
  为了便于说明,我自己写了一个java文件然后打包成jar,再在rcp程序中调用它。这个程序是这样的:
  
  Code:
  package demo;
  
  public class Hello {
  public static String sayHello()

 
  {
  return "hello,world";
  }
  }
  [Ctrl+A Select All]
  
  就这么简单,打包后做成一个hello.jar。具体过程略去不谈。
  
  然后我们新建一个rcp application,具体过程也略去不谈。这里需要提醒大家的是rcp工程的名字最好用小写英文,用大写的话可能会出一些问题,至少在我用的这个版本是这样。
  
  建好以后在下面新建一个lib目录作为存放第三方库的目录。再把前面做好的hello.jar拷贝过去。参见下图。
我们拿一个简单的示例来说明,这个示例使用的是eclipse rcp的template中最简单的一个,也就是大家都见过的Hello,RCP。我用的eclipse版本是3.2M2。
  
  为了便于说明,我自己写了一个java文件然后打包成jar,再在rcp程序中调用它。这个程序是这样的:
  
  Code:
  package demo;
  
  public class Hello {
  public static String sayHello()
  {
  return "hello,world";
  }
  }
  [Ctrl+A Select All]
  
  就这么简单,打包后做成一个hello.jar。具体过程略去不谈。
  
  然后我们新建一个rcp application,具体过程也略去不谈。这里需要提醒大家的是rcp工程的名字最好用小写英文,用大写的话可能会出一些问题,至少在我用的这个版本是这样。
  
  建好以后在下面新建一个lib目录作为存放第三方库的目录。再把前面做好的hello.jar拷贝过去。参见下图。
我们拿一个简单的示例来说明,这个示例使用的是eclipse rcp的template中最简单的一个,也就是大家都见过的Hello,RCP。我用的eclipse版本是3.2M2。
  
  为了便于说明,我自己写了一个java文件然后打包成jar,再在rcp程序中调用它。这个程序是这样的:
  
  Code:
  package demo;
  
  public class Hello {
  public static String sayHello()
  {
  return "hello,world";
  }
  }
  [Ctrl+A Select All]
  
  就这么简单,打包后做成一个hello.jar。具体过程略去不谈。
  
  然后我们新建一个rcp application,具体过程也略去不谈。这里需要提醒大家的是rcp工程的名字最好用小写英文,用大写的话可能会出一些问题,至少在我用的这个版本是这样。
  
  建好以后在下面新建一个lib目录作为存放第三方库的目录。再把前面做好的hello.jar拷贝过去。参见下图。

 

 

图一

 

在RCP工程中,你可以有两种办法把jar加入到class path中,你可以任选一种:
  
  1、和普通的工程一样,加入到build path里面,参见下面图二。



 图二

 

2、打开plugin的Build页面,注意到最下面有个“Extra Classpath Entries”了么?展开以后选Add Jars把需要
     的jar加进去,有同样的效果,参见图3

图三

 

我在这里说“任选一种”的意思是不要两种办法同时用,否则工程会报错。

      在上面的工作都做完之后,仍然在plugin的Build页面上,左边的Binary Build下面把你程序的输出目录(我的工程里面是bin)和你的jar所在的目录(我的工程里面是lib)打勾,这样输出时候会包含你编译后的文件以及第三方库。仍然参照第三张图
  
  然后切换到plugin的Runtime页面,在右下角的Classpath里面把你程序的输出目录(我的程序里面是bin)和你所有要包含的jar文件(我的程序里面是lib/hello.jar)都加进去。参照图4,这样就基本上完成了。
 

图四

 

之后所要做的事情就是修改程序了,我在这里只是简单地把程序的标题做了修改,找到ApplicationWorkbenchWindowAdvisor这个类,把preWindowOpen修改成下面这样:
  
  Code:
  
  public void preWindowOpen() {
  IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
  configurer.setInitialSize(new Point(400, 300));
  configurer.setShowCoolBar(false);
  configurer.setShowStatusLine(false);
  configurer.setTitle(Hello.sayHello());
  }
  [Ctrl+A Select All]
  
  这个示例就完成了,之后产生product文件后export出来就可以看到结果了。过程也略去不谈。
  
  运行以后会发现标题栏从“Hello,RCP”变成了“hello,world”,参见第图五。



 
 

图五

 

RCP实践之第三方JAR包 写道
感谢大家对上一篇文章的拍砖,引起的反响不小,目的达到了~,希望可以继续板儿砖横飞!

     今天来说说第三方JAR包的引入。RCP开发(或者plugin开发)中最让人头疼就是第三方JAR包的引入了,很多初学的朋友常常头疼,介绍的文章也不少了,如果搞不定,自己google一下就可以了。

    为什么第三方JAR包会引发如此众多的问题,其实并不是Eclipse的错,而是先入为主的错。如果你一开始就就接触Eclipse开发,以后再做不同java开发,你就会觉得java的类加载机制是变态了~Eclipse的类加载机制是基于OGSI的实现,它完成了插件的独立加载和独立维护,正是因为这种变态的类加载机制,才有了我们头大的第三方jar包的问题,也正是这种伟大的类加载机制,才有了即插即用的思路的诞生。

     大多数简单的RCP项目都是将所有的JAR包放入本地项目中,然后直接进引入项目路径,就开始整了,对于小的应用,或者开发人员少的情况下,这样是可行的,也是便捷的~但是RCP的目标是大型的企业级应用,一个系统由十几个,几十个插件组成,是很正常的。所以就要求我们将RCP中所有用到的第三方JAR包统一管理,统一维护,给开发人员少一些烦恼。

思路有两种:

    1.将JAR文件plugin样子包装,及新建Plug-in from existing jar archives 项目,然后选择JAR文件,再取消Unzip the jar archives into the project 选项,然后其它的插件依赖它就可以了。

     2.新建一个不同插件项目,然后把第三方JAR包放入这个项目,然后引入到此项目中,在plugin.xml的runtime配置页的Exported Packages 选Add... 再选择要发布出去的包路径,然后其他的插件依赖它就可以了。

     官方推荐的方式是第一种,个人认为第一种确实很好,可以非常好而且方便的维护第三方JAR包。但是我还是选择了第二种方式,理由是,配置文件读取的问题。

    每一个插件文件都会维护一份属于自己的配置文件,只有这样才能做到自我独立。但是这两种方式都不能使其他插件项目的配置文件独立维护,原因就是Eclipse那讨厌又强大的类加载机制。

    使用第一种方式,配置文件必须放在你记载的进来的JAR包的里面,这样Eclipse类加载机才会加载并处理,除非选择了Unzip the jar archives into the project 选项,并把配置文件和一堆的class文件放在同一目录下类加载机才能发现。我想这种方式谁都不会喜欢,要么就是我们要创造自己的JAR包,要么工作台遍布了各种各样来自世界各地的class文件。

    使用第二种方式,是通过运行时将需要发布出来供别人依赖的package发布出来,而配置文件则需要放在此插件项目中。相对而言,这种比上一种有很大的好处,而且也不是那么难维护。

    以上只是自己项目中的一些总结,关于第三方JAR包的问题,我查了很多资料,好像逃不过这三种方式(直接在项目中依赖算一种),不知道各位大侠还有没有更好的办法,即能处理好第三方JAR包,又能保持各个插件维护自己独立的配置文件?

转载自http://www.blogjava.net/leeguannan/archive/2007/06/20/125423.html

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics