`
bmqnc
  • 浏览: 127464 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于eclipse加载bundle的问题的一些讨论

    博客分类:
  • java
阅读更多
这两天主要是为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-汉化包

    在实际使用中,开发者还需要注意版本兼容性问题,确保汉化包与正在使用的Eclipse ADT Bundle版本匹配。此外,及时更新汉化包和ADT Bundle可以确保获取最新的功能和修复的安全漏洞。 总的来说,Eclipse ADT Bundle...

    OSGi_with_Eclipse_Equinox_-_Tutorial

    MANIFEST.MF文件是每个bundle必须包含的元数据文件,它包含了关于bundle的重要信息,如名称、版本、依赖等。例如: ``` Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Example Bundle Bundle-...

    Eclipse插件开发方法与实战

    下面,我们将详细讨论Eclipse插件开发的相关知识点。 1. **Eclipse插件体系结构**: - Eclipse采用插件化架构,每个功能模块都是一个插件,通过OSGi(开放服务网关规范)框架进行管理和交互。 - 插件之间的依赖...

    EclipseRCP系统开发与实战(书).rar

    - RCP应用程序可以利用Eclipse IDE的一些特性,如调试、版本控制、任务管理等。 - 可以通过RCP构建自定义的IDE,满足特定领域的开发需求。 8. **实战案例分析** - 书中可能包含实际开发项目,例如创建一个简单的...

    Best Practices for Programming Eclipse and OSGi

    但是,Require-Bundle也有一些缺点: - 紧密耦合:需要特定包的存在,可能会带来脆弱性。 - 分割包问题:完整性、顺序性和性能方面可能存在问题。 - 版本依赖:对于版本控制不严格的项目来说,可能会引起问题。 ##...

    eclipse --- Android拍照,相册选择图片以及Android6.0权限管理

    在Android应用开发中,Eclipse是一个广泛使用的集成开发环境(IDE),尽管现在大多数开发者已经转向了Android Studio。本文将深入探讨如何在Eclipse环境下实现Android应用中的关键功能:拍照、从相册选择图片以及...

    OSGI进阶 dist ZIP

    2. **类加载器**:OSGI使用了一种独特的类加载机制,每个bundle都有自己的类加载器,这样就能实现类的隔离,避免了传统的Java类加载冲突问题。 3. **服务注册与发现**:OSGI提供了一个服务注册表,允许bundle之间...

    OSGi Web示例工程

    OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化Java应用程序,它允许开发者将应用程序分解为独立的、可管理的组件,称为...如果你在搭建过程中遇到问题,记得留言讨论,以便获取更多帮助。

    基于OSGi的Web应用开发系列(全).pdf

    2. **数据库驱动和连接池的依赖问题**:确保它们在OSGi环境中能正确加载和工作。 3. **整理SSH所需的OSGi Bundle**:将SSH框架及其依赖适配到OSGi的模块化结构中。 解决这些问题后,开发者可以开始在OSGi环境中使用...

    OSGi Modularity - Tutorial

    OSGi(Open Service Gateway Initiative)是一个为Java平台定义的组件和服务模型规范。...最后,文档提供了致谢、问题和讨论、链接和文献等附加资源,帮助读者深入了解OSGi和Eclipse Equinox的其他学习材料。

    很久之前的osgi整理

    8. **工具支持**:在“工具”这个标签下,我们可以推测文章可能讨论了用于开发和调试OSGi应用的工具,例如Equinox、Felix等开源OSGi实现,以及Eclipse IDE中的插件支持。 9. **实际应用**:OSGi在许多大型企业级...

    osgi开发驱动

    标签"equinox"进一步强调了我们正在讨论的是Eclipse Equinox OSGi实现,它在OSGi生态中占有重要地位,因为它被广泛用于构建可扩展和可维护的Java应用。 在提供的压缩包文件名称列表中: - content.jar:通常包含...

    初学OSGI

    - **类加载器**:每个Bundle有自己的类加载器,隔离了不同Bundle之间的类,实现了类的封装和版本控制。 - **服务**:OSGi中的服务允许组件之间通信,通过服务注册表进行查找和交互。 2. **OSGi的优势**: - **...

    osgi 构建模块化云应用之中文版

    此外,书中还涉及了如何利用Eclipse、Tycho、NetBeans和IntelliJ等IDE来支持OSGi开发。 在云应用架构方面,本书讨论了如何通过OSGi技术实现应用的模块化和轻量级Web应用的开发。它强调了OSGi技术与SOA(面向服务的...

    OSGi 原理与最佳实践

    8. **工具支持**:标签中提到的“工具”意味着可能会讨论一些用于开发、调试和管理OSGi应用的工具,如Eclipse IDE的PDE(Plug-in Development Environment)、Bndtools等,这些工具简化了OSGi应用的开发流程。...

    java国际化组件

    接着,我们讨论Resource Bundle。在Java中,Resource Bundle是一个包含本地化字符串和其他资源的类。通常,开发者会为每种支持的语言创建一个对应的 ResourceBundle 文件,文件名通常以".properties"结尾,如...

    OSGI学习手册及实践

    - **ClassLoader**:OSGI使用独立的类加载器为每个Bundle提供隔离的类加载环境,确保不同Bundle之间的类不会冲突。 - **Bundle的生命周期**:定义了Bundle从安装、启动到停止和卸载的各个阶段及其状态转换。 - **...

    OSGi实战进阶篇

    ### OSGi实战进阶篇知识...- **思考与展望**:提出一些关于OSGi未来的思考和想象,激发读者的创造力。 #### 十二、参考文献 - **参考资料**:列出撰写本文时参考的主要文献和资料来源,为读者提供进一步学习的方向。

    OSGi原理与最佳实践

    2. **模块化系统**:详述OSGi如何实现模块化,包括类加载器的层次结构、包的导入和导出机制,以及如何通过MANIFEST.MF文件声明bundle的依赖关系。 3. **动态性与版本管理**:讨论OSGi如何处理运行时的模块更新和...

Global site tag (gtag.js) - Google Analytics