OSGi enRoute – 2.3_12 – Eclipse和Bndtools
在本章中你将学到什么
在本章中,我们将会通过Eclipse使用Maven来开发Bundle。我们会展示如何对bnd和bndrun文件来使用Bndtools编辑器以及如何调试你的代码。
我们假定你已经配置好了Eclipse并且已经安装了Bndtools。你可以查看快速入门来了解如何设置你的开发环境。M2Eclipse一般已经随Eclipse安装完毕了。
尽管我们需要在本章中安装Bndtools,但是我们仅独立使用编辑器。不要将工程设置成Bndtools工程。
M2Eclipse
如果你希望使用Maven和Eclipse,那么M2Eclipse对OSGi enRoute开发来说会是最佳解决方案。它允许你在文件系统的任意位置创建一个Eclipse 工作空间和工程。
本教程并不会教你如何使用M2Eclipse,如果你希望了解M2Eclipse则需要查看其它资料。
Bnd Editor
如果你在Eclipse中安装了Bndtools,则在你双击一个bnd文件时会打开一个Bnd Editor。在Editor的各个选项卡中最重要的是Source选项卡。这个Editor在指令 和数据头上提供了语法着色、自动完成和工具栏提示。Bnd Editor的一个重要功能是当你在反斜杠后使用空格时会提醒你这会被视作一行的结束。Editor会识别出很多错误的位置并尽快警告你。
Content选项卡和Description选项卡在stand-alone模式下同样会工作。在Content选项卡里,如果在Bndtools工程中没有发现bnd.bnd文件则Import不会被自动计算。然而,你仍然可以将package拖放到Private-Package或Export-Package列表中并自定义Import内容。
Build、Run和Test选项卡仅会在Bndtools工程中工作。
JAR Viewer
如果你在一个JAR文件上双击你将会默认使用Bndtools JAR Editor来打开它。这个Editor包含一个Content和Print选项卡。
Content选项卡是一个内容列表,你可以浏览Manifest和其他文件。
Print选项卡是bnd的一个分析结果输出。它以更为细致和可读的方式展示了manifest信息和DS信息。
Resolution Viewer
如果你打开Resolution 视图(Window/Show View/Bndtools/Resolution),那么它会跟踪用户的选择。如果你选择了一个JAR文件,则它会分析这个JAR文件并且会以比Manifest更具可读性的方式来展示其功能(capabilities)和需求(requirements)。
特别是包的需求(Requirements)更为有用。你可以看到计算出的import范围,同时通过展开内容,你可以看见导致这些需求的类。
Bndrun Editor
Bndrun Editor带有两个选项卡。第一个是Source选项卡。这个选项卡与bnd Editor基本相同。在你创建有问题的属性内容时,它会提供了代码补全、高亮和错误检测功能。
另外一个是Run选项卡,它在编辑bndrun文件时会非常有用,因为它会展示出可能的依赖。这些依赖可以在筛选后通过拖放来添加到-runrequires 指令中。通过点击按钮,可以对这个列表进行解析。然后解析的结果的内容可以通过检查来处理参数(它们会被单独列出来)并且分析具体的Bundle是从哪里来的。
Bndrun Editor可以独立运行应用程序,也可以在调试器中运行应用程序。它不支持对代码修改进行动态更新,你需要在更新之前对工程进行install。
解析(Resolving)
如果你双击bndrun文件夹中的 osgi.enroute.examples.eval.bndrun 文件,那么你会打开一个Bndrun editor。你可以选择Run选项卡。
在Browse Repos列表中的Bundle是根据bndrun文件夹中的pom.xml文件计算而来。(这由Bnd Pom Repository插件进行定义。)你可以将这个列表中的Bundle拖放到Run Requirements列表中。
解析结果会被存储到target/cache.xml文件中以加快解析速度。在pom.xml文件中的改动会被检测到,不过如果你产生了整体改动则需要在maven中clean工程来移除缓存文件,因为这些改动无法被检测到。
在Browse Repos列表的下面你可以设置框架、执行环境和运行时属性,这些都非常简单明了。
一旦初始需求(initial requirements)设置完毕后,你可以点击Resolve按钮。这将会打开一个带有Resolution的窗体(这个操作有时候会需要一点时间):
解析的结果会在顶部列表中展示必需资源(Required Resources),它们基于Initial Requirements。紧接着下面展示了可选资源( optionalresources)。这些资源被包含进来是因为如果没有它们解析也没问题,但是有些资源需要使用它们。你可以选择希望用到的资源然后进行更新和解析。
当你在顶部列表中选择了一个资源后,底部的列表会展示出该资源被包含进来的原因。也即那些资源需要它。
当你点击Finish按钮后 -runbundles 列表会被更新,并且bnd.bnd文件会被保存。
这些工作执行得非常快并且比起运行mvn install来说更为优雅,它们能过获得新的-runbundles并更新bndrun文件。不过这些工作需要依赖Eclipse。
调试
在Run选项卡中的Bndrun Editor的右上角有两个按钮:
● Run OSGi——运行应用程序
● Debug OSGi——在调试器中运行定义后的应用程序
● Export——将应用程序及其依赖包导出生成一个可执行JAR
M2Eclipse会不断地编译并运行某些插件,但是并不会将它们打成JAR包。也就是说你需要执行mvn install来更新~/.m2/repository中的Bundle。在你运行带有Bndrun Editor支持的框架时,你应该会注意到当你改变源码时Eclipse会更新VM中的代码,但是它并未创建一个新的Bundle。改变仅限于类文件,并不会对资源进行更新。M2Eclipse会不断地同步所有的更新,这与Bndtools的体验有很大区别。
这意味着如果你在Eclipse中开展工作的话,你必须对不同的工程的状态非常清楚。一般来说,在你创建了改变之后就应该对该工程进行一次完整的clean install操作。
注意:当你执行install时,Maven JAR插件会覆盖已有的文件。这可以导致JVM的core dump。 |

