这两天主要是为GMF的环境的事情弄的焦头烂额,问题很多,而自己一开始的时候没有注意到这些问题(尤其是插件之间的版本的依赖关系),导致弄了很长时间。
首先说明我碰到的问题:
1.application id not found.
2.找不到对应的bundle问题.
主要是围绕这两个问题查了很多资料,原来不了解osgi,后来查了osgi相关的概念,总算理解了一些,但是当时问题还是没有解决。
在加载一个插件的时候,manifest.mf文件中会列出必须加载的插件,这些加载的插件之间有一些依赖关系,这种依赖关系包含版本号。我分析这种依赖关系的加载顺序是在加载第一个bundle时,发现require bundles中存在某个bundle,则去加载此bundle,依此递推。关键的问题在于不同的bundle之间存在某些依赖,而这种依赖是版本相关的。一开始的时候我没注意到这些问题,只知道copy相应的插件就可以,但实际上这样不可以。因为虽然此时编译不会出错(因为所有的对应类都能找到),但是osgi在插件装载的时候会检测插件版本,因此这也是不行的。
像这种bundle装载时有一种跟踪技巧,因为很多时候一旦发生这种问题,信息太多了,多得你无法看完全部信息,而单纯的看前面的几个信息,可能会忽略一些细节问题,比如,对于所有的必须插件,你认为已经全部在target中了,当然,版本信息忽略,此时大家怎么想都想不到是版本问题。因此,当你发现第一个bundle没有加载成功的时候,需要跟踪进去看该资源为什么没有被加载进来,是由于哪个资源没被加
首先说明我碰到的问题:
1.application id not found.
2.找不到对应的bundle问题.
主要是围绕这两个问题查了很多资料,原来不了解osgi,后来查了osgi相关的概念,总算理解了一些,但是当时问题还是没有解决。
在加载一个插件的时候,manifest.mf文件中会列出必须加载的插件,这些加载的插件之间有一些依赖关系,这种依赖关系包含版本号。我分析这种依赖关系的加载顺序是在加载第一个bundle时,发现require bundles中存在某个bundle,则去加载此bundle,依此递推。关键的问题在于不同的bundle之间存在某些依赖,而这种依赖是版本相关的。一开始的时候我没注意到这些问题,只知道copy相应的插件就可以,但实际上这样不可以。因为虽然此时编译不会出错(因为所有的对应类都能找到),但是osgi在插件装载的时候会检测插件版本,因此这也是不行的。
像这种bundle装载时有一种跟踪技巧,因为很多时候一旦发生这种问题,信息太多了,多得你无法看完全部信息,而单纯的看前面的几个信息,可能会忽略一些细节问题,比如,对于所有的必须插件,你认为已经全部在target中了,当然,版本信息忽略,此时大家怎么想都想不到是版本问题。因此,当你发现第一个bundle没有加载成功的时候,需要跟踪进去看该资源为什么没有被加载进来,是由于哪个资源没被加