这两天一直被在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
分享到:
相关推荐
然而,在实际开发中,我们经常需要使用第三方包来实现某些功能,这篇文章将介绍如何在Eclipse RCP中使用第三方包。 首先,我们需要新建一个Eclipse RCP应用程序,然后创建一个lib目录作为存放第三方库的目录。在这...
10. **调试和测试**:书中还会介绍如何在Eclipse RCP环境中进行调试和编写单元测试。 11. **扩展点(Extension Points)**:这是Eclipse RCP插件系统的关键特性,允许插件之间通过定义和使用扩展点来相互协作。 12...
这通常在"Product Configuration"的"Images"部分进行设置,你可以上传一个符合Eclipse RCP格式要求的图片作为闪屏。 8. **重新配置**:如果需要对闪屏或其它配置进行更改,回到步骤5,再次进行打包。这将覆盖之前的...
在本教程中,我们将详细介绍 Eclipse RCP 的开发过程、技术要点和注意事项,以帮助开发者快速掌握 Eclipse RCP 的开发技术。 一、Eclipse RCP 的技术要点 Eclipse RCP 的核心技术包括: 1. SWT(Standard Widget ...
1. **创建新的Eclipse插件项目**: 在Eclipse中选择File -> New -> Other -> Plug-in Project。 2. **定义插件元数据**: 描述插件的基本信息,如名称、ID、版本号等。 3. **实现功能**: 开发插件的核心逻辑和用户界面...
在"eclipse rcp应用系统开发方法与实战源代码.zip"中,我们可以学习到以下关键知识点: 1. **Eclipse RCP架构**:理解Eclipse RCP的基础架构非常重要,包括插件(Plugins)、工作台(Workbench)、视图(Views)、...
虽然SWT/JFace开发基础知识是可选的,但是这些是Eclipse RCP开发中常用的图形用户界面技术,熟悉它们会对开发有所帮助。 Eclipse RCP应用的开发过程需要利用Eclipse插件开发工具PDE(Plug-in Development ...
在“Eclipse RCP 例子程序”中,我们可能找到一系列的示例代码和项目,这些示例展示了如何利用Eclipse RCP的各种组件和机制来构建实际的应用。以下是一些关键的知识点: 1. **插件系统**:Eclipse RCP的核心是其...
标题中的“在Eclipse RCP中应用Spring OSGI 管理bean(一)”表明这是一篇关于如何在...通过有效地结合这三个组件,开发者能够在Eclipse RCP应用中实现高度模块化和可维护的架构,同时享受到Spring框架带来的便利。
《ECLIPSE+RCP应用系统开发方法与实战》这本书是高岗先生关于使用Eclipse RCP(Rich Client Platform)进行应用系统开发的一本实战指南。Eclipse RCP是Eclipse IDE的一部分,它提供了一个框架,使得开发者可以构建...
【描述】中的“非常棒的一个rcp应用程序”意味着这个工程展示了Eclipse RCP的强大功能和易用性,可能是通过集成MP3播放、管理、编辑等功能来实现的。"学习学习,快来下"则提示这个项目适合学习Eclipse RCP的开发者,...
在 Eclipse RCP 中,JUnit 可以用来验证插件的行为是否符合预期。编写良好的单元测试有助于确保代码的质量和稳定性。 ##### JFace Data Binding JFace 数据绑定提供了将 UI 控件与模型对象自动同步的能力。通过...
2. **创建RCP工程**:在Eclipse中,选择"File" > "New" > "Project",然后在"Plug-in Development"类别下选择"Eclipse RCP Application",按照向导完成新工程的创建。 3. **创建视图(View)**:RCP应用中的显示...
eclipse RCP(Rich Client Platform)是一种基于eclipse的插件式开发平台,允许开发者使用eclipse结构风格设计弹性的可扩展的应用程序。RCP插件式开发方式可以重用eclipse中的方法和编码模式,提高开发效率和代码...
Eclipse Rich Client Platform(RCP)是Eclipse框架下的一个核心组成部分,用于构建桌面应用..."Eclipse RCP培训.zip"中的内容可能涵盖了这些方面,包括理论讲解、代码示例、练习项目等,是学习Eclipse RCP的好资源。
这个压缩包中的“ECLIPSE RCP项目源程序”包含了使用Eclipse RCP开发的一个项目的完整源代码,并且有中文注释,这对于初学者或有经验的开发者来说都是一个宝贵的资源。 Eclipse RCP的核心概念主要包括以下几个方面...
`CheckTableViewDemo.java`可能是演示如何在Eclipse RCP应用中创建和使用检查表的一个示例代码。在这个文件中,我们可以期待看到关于如何创建自定义表视图、添加复选框列以及处理用户选择事件的相关代码。开发者可能...
在本"Common Navigator demo"中,我们将深入探讨如何利用Eclipse RCP创建一个基于Common Navigator的简单应用,并了解如何扩展这一基础功能。 首先,Common Navigator是Eclipse RCP中用于显示项目、文件和其他资源...
你可以定义自己的扩展点,或者利用Eclipse提供的内置扩展点,例如向启动器菜单添加新的项,或在透视图中插入自定义视图。 在开发过程中,理解生命周期管理非常重要。Eclipse RCP对象(如视图和编辑器)都有自己的...
4. **示例应用**:`example_rcp_applications_v2.pdf`可能是包含实际RCP应用的案例研究,这些案例将展示如何使用RCP来构建复杂的应用程序,以及在实践中可能遇到的问题和解决方案。 5. **HTML文章**:`article....