在eclipse中调试Felix

因为正看一个基于Felix的开源程序,今天搭配了Felix的开发环境。

 

如何利用Eclipse调试Felix bundle,在Felix的网站上有介绍。可见网址http://felix.apache.org/site/integrating-felix-with-eclipse.html

另外,在《OSGi原理与最佳实践》上也有关于搭配Felix 开发环境两种方法的介绍。(应该说后者其实就是copy前者Felix网站上的东东)。

 

但是这两个在讲完环境搭配之后如何调试却一笔带过,反而让人搭配了环境却不知如何用。在此总结一下自己的心得。

 

这里对不采用Pax runner的方法做点补充。

 

备注:Pax cursor已经更新为Pax runner,具体内容就去google吧。

 

 

第一步:搭配一个专用于调试的Java Project——felix。

按照http://felix.apache.org/site/integrating-felix-with-eclipse.html 上的说明,建立一个java project。上面步骤将的非常清晰了。

按照他的步骤搭配完毕,将会获得一个专门用于调试bundle 程序的Java project——Felix。很明显,其实他就是吧Felix在eclipse中医project的形式运行而已,console窗口就是Felix的命令行窗口。操作当然相同。

 

我将这个称之为调试环境。注意不要再另外在该project中添加自己的东西了。

 

第二步:编写自己的程序。

 

因为Felix的bundle都是符合OSGI standard的,所以Felix下的bundle就是标准的OSGI bundle。如有怀疑这一点,可以去Felix的网站上常见问题里去找答案,提示一下第一个问题就是答案。

因此在eclipse中,我们新建Felix的bundle,可以利用Eclipse插件向导来做,只需要注意选择OSGI standard即可,在元文件编辑窗中不要去填写用于Equinox的那些属性就可以了。

 

具体步骤可以参考建立Eclipse 插件工程的步骤。这个Google一下即可。《osgi实战》也有介绍。

 

开发完自己的bundle之后。打包,Export为plug-in fragments。注意将Export的文件夹地址可以直接设置为刚才创建的Felix project中的bundle文件夹。当然也可以导出到某个位置再将其拷贝到该bundle目录下。

 

 

第三步:调试程序。

 

# 在你的程序中设置所需的断点。

# 启动Felix project,进入debug模式,注意确保先前设置的debug configuration正确无误。

   这样Felix 将会自动将bundle文件夹下你的bundle运行调试,如果你没有进入调试模式,会提示你进入。

 

# 此时,debug会出现找不到源文件,点击attach source,选择add project,然后选择刚才要调试的那个project的名称       即可。eclipse会自动搜索到源文件。如果你的debug窗口中正常显示了你的源程序,恭喜!成功了。你此时会发现程序

  正停留在你设置的断点处等待你调试。这时和调试普通程序没什么区别。

 

  如果你对程序进行了修改,那么重新打包一次至于bundle文件夹下,重新启动felix project 进入debug模式,Felix会自动导入你修改过的bundle。

 

如果要建立多个bundle,重复就行了。

 

总结:

# 先建立一个干干净净的Felix Javaproject作为调试环境。然后正常编写一个bundle,将其置于Felix下的bundle目录调试即可,最重要的是添加source路径使其能找到源码位置。

 

# 有人可能有不同意见,认为本人这样太麻烦了。当然,我们将这两个工程作为一个工程就可以调试,大可不必分开,但是如果你要调试很多bundle,这种优越性就显示出来了。

  @ 你只需要建一个Felix 调试环境,而不必为每个bundle都重复这个工作。

  @ 要知道调试一个bundle和调试多个bundle是不同的。当你编写的bundle相互有依赖关系,那你必然要把他们放到一个Felix下运行才对,想想每个bundle单独构建一个调试环境的结果会是什么?

  @ 你还可以在这个Felix下检查到多个bundle之间的交互,及早发现可能存在的冲突

  @ 当你把所有的bundle调试完成,也就同时部署完成了,只要没有问题,Felix project正是部署好你的项目的服务器,可以直接把该project拷贝出来用,当然删掉eclipse的专用文件就更干净了,如.setting文件夹。 

  @ 另外,又想到一点,分为两个project,你在导出时无需更多设置直接导出为plug-in就是所要的bundle包。如果放在一个Java project中,将Java project导出为能用的bundle恐怕还需要你手动设置

 

参考网站:

http://felix.apache.org/site/integrating-felix-with-eclipse.html

 

 

你可能感兴趣的:(java,apache,Google,osgi,felix)