这两天主要是为GMF的环境的事情弄的焦头烂额,问题很多,而自己一开始的时候没有注意到这些问题(尤其是插件之间的版本的依赖关系),导致弄了很长时间。
首先说明我碰到的问题:
1.application id not found.
2.找不到对应的bundle问题.
主要是围绕这两个问题查了很多资料,原来不了解osgi,后来查了osgi相关的概念,总算理解了一些,但是当时问题还是没有解决。
在加载一个插件的时候,manifest.mf文件中会列出必须加载的插件,这些加载的插件之间有一些依赖关系,这种依赖关系包含版本号。我分析这种依赖关系的加载顺序是在加载第一个bundle时,发现require bundles中存在某个bundle,则去加载此bundle,依此递推。关键的问题在于不同的bundle之间存在某些依赖,而这种依赖是版本相关的。一开始的时候我没注意到这些问题,只知道copy相应的插件就可以,但实际上这样不可以。因为虽然此时编译不会出错(因为所有的对应类都能找到),但是osgi在插件装载的时候会检测插件版本,因此这也是不行的。
像这种bundle装载时有一种跟踪技巧,因为很多时候一旦发生这种问题,信息太多了,多得你无法看完全部信息,而单纯的看前面的几个信息,可能会忽略一些细节问题,比如,对于所有的必须插件,你认为已经全部在target中了,当然,版本信息忽略,此时大家怎么想都想不到是版本问题。因此,当你发现第一个bundle没有加载成功的时候,需要跟踪进去看该资源为什么没有被加载进来,是由于哪个资源没被加载进来导致的。就像程序的调试一样,当一步步的跟踪到深层的原因之后之后,可以检查一下对应的插件是否存在,如果存在,还要注意到版本问题,到了此时,大家就会明显的注意到版本问题了。
由此的经验教训时,对于eclipse的插件开发尤其注意版本问题。
此时也要注意两种的eclipse安装插件方式,(同时plugin.xml文件中的一些特定信息,如要求的jdk的版本号),如果单纯的利用eclipse的更新安装插件不会有任何问题,如果直接下载sdk安装则需要查一下sdk与eclipse的版本之间的对应关系。否则导致插件之间的版本依赖关系问题,导致运行问题。后一种方式比较的tricky,因为同样是jar包引入,但是它不会导致在eclipse编译问题,而直到运行的时候才会发生错误,这时候就很迷茫了。。因为我们作为程序员,我们不担心编译问题,但我们就怕运行时问题。(好像这句话不是我原创的,也不知道在哪本书上看到大意类似这样的句子,^_^)。
记得以前版本管理时有人说过,team成员之间最好使用的工具版本应一致,甚至采用的工作目录都应该一致,否则会造成一些配置环境问题。
所以典型的问题是:rcp中采用了之前某个版本的eclipse的插件,而原开发人员可能刚好他的开发工具版本与此一致,因此在原开发人员的机器上不存在问题。而在没有原开发人员的通知下,新开发人员可能使用新版本的eclipse,因此在此种情况下,原开发人员在原eclipse的基础上安装插件进而再次开发不会碰到插件问题,而新开发人员就会碰到插件相关的版本问题了。
所以,从软件项目的管理上来说,保持一致的开发环境是相当必要的。
之前还碰到过一个问题(编译问题是:路径不完整,类无法直接引用),就是原来的rcp在eclipse 3.4中能够运行的很好,但是转移到3.6之后却出现了编译错误,理解了上面这些问题之后,今天我再试了一次,问题很容易的就搞定了。解决的办法其实很简单,就是在相应的manifest.mf中加入相应的类所在的bundle名称,就能搞定这个问题了。
不过3.6和3.4比,有点不一样,target platform 配置的方式不同,另外,在程序启动的时候,控制台打印出的消息也不同。3.6打印的输出信息更多。
分享到:
相关推荐
在实际使用中,开发者还需要注意版本兼容性问题,确保汉化包与正在使用的Eclipse ADT Bundle版本匹配。此外,及时更新汉化包和ADT Bundle可以确保获取最新的功能和修复的安全漏洞。 总的来说,Eclipse ADT Bundle...
下面,我们将详细讨论Eclipse插件开发的相关知识点。 1. **Eclipse插件体系结构**: - Eclipse采用插件化架构,每个功能模块都是一个插件,通过OSGi(开放服务网关规范)框架进行管理和交互。 - 插件之间的依赖...
- RCP应用程序可以利用Eclipse IDE的一些特性,如调试、版本控制、任务管理等。 - 可以通过RCP构建自定义的IDE,满足特定领域的开发需求。 8. **实战案例分析** - 书中可能包含实际开发项目,例如创建一个简单的...
但是,Require-Bundle也有一些缺点: - 紧密耦合:需要特定包的存在,可能会带来脆弱性。 - 分割包问题:完整性、顺序性和性能方面可能存在问题。 - 版本依赖:对于版本控制不严格的项目来说,可能会引起问题。 ##...
在Android应用开发中,Eclipse是一个广泛使用的集成开发环境(IDE),尽管现在大多数开发者已经转向了Android Studio。本文将深入探讨如何在Eclipse环境下实现Android应用中的关键功能:拍照、从相册选择图片以及...
2. **类加载器**:OSGI使用了一种独特的类加载机制,每个bundle都有自己的类加载器,这样就能实现类的隔离,避免了传统的Java类加载冲突问题。 3. **服务注册与发现**:OSGI提供了一个服务注册表,允许bundle之间...
OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化Java应用程序,它允许开发者将应用程序分解为独立的、可管理的组件,称为...如果你在搭建过程中遇到问题,记得留言讨论,以便获取更多帮助。
2. **数据库驱动和连接池的依赖问题**:确保它们在OSGi环境中能正确加载和工作。 3. **整理SSH所需的OSGi Bundle**:将SSH框架及其依赖适配到OSGi的模块化结构中。 解决这些问题后,开发者可以开始在OSGi环境中使用...
OSGi(Open Service Gateway Initiative)是一个为Java平台定义的组件和服务模型规范。...最后,文档提供了致谢、问题和讨论、链接和文献等附加资源,帮助读者深入了解OSGi和Eclipse Equinox的其他学习材料。
8. **工具支持**:在“工具”这个标签下,我们可以推测文章可能讨论了用于开发和调试OSGi应用的工具,例如Equinox、Felix等开源OSGi实现,以及Eclipse IDE中的插件支持。 9. **实际应用**:OSGi在许多大型企业级...
标签"equinox"进一步强调了我们正在讨论的是Eclipse Equinox OSGi实现,它在OSGi生态中占有重要地位,因为它被广泛用于构建可扩展和可维护的Java应用。 在提供的压缩包文件名称列表中: - content.jar:通常包含...
- **类加载器**:每个Bundle有自己的类加载器,隔离了不同Bundle之间的类,实现了类的封装和版本控制。 - **服务**:OSGi中的服务允许组件之间通信,通过服务注册表进行查找和交互。 2. **OSGi的优势**: - **...
此外,书中还涉及了如何利用Eclipse、Tycho、NetBeans和IntelliJ等IDE来支持OSGi开发。 在云应用架构方面,本书讨论了如何通过OSGi技术实现应用的模块化和轻量级Web应用的开发。它强调了OSGi技术与SOA(面向服务的...
8. **工具支持**:标签中提到的“工具”意味着可能会讨论一些用于开发、调试和管理OSGi应用的工具,如Eclipse IDE的PDE(Plug-in Development Environment)、Bndtools等,这些工具简化了OSGi应用的开发流程。...
接着,我们讨论Resource Bundle。在Java中,Resource Bundle是一个包含本地化字符串和其他资源的类。通常,开发者会为每种支持的语言创建一个对应的 ResourceBundle 文件,文件名通常以".properties"结尾,如...
- **ClassLoader**:OSGI使用独立的类加载器为每个Bundle提供隔离的类加载环境,确保不同Bundle之间的类不会冲突。 - **Bundle的生命周期**:定义了Bundle从安装、启动到停止和卸载的各个阶段及其状态转换。 - **...
2. **模块化系统**:详述OSGi如何实现模块化,包括类加载器的层次结构、包的导入和导出机制,以及如何通过MANIFEST.MF文件声明bundle的依赖关系。 3. **动态性与版本管理**:讨论OSGi如何处理运行时的模块更新和...
8. **源码与工具标签**:这表明讨论可能涵盖了OSGI的源码分析和使用特定工具进行OSGI开发的经验,比如如何通过源码理解OSGI的工作原理,或是如何利用Eclipse等工具高效地进行模块化开发。 总的来说,OSGI提供了一种...