我使用java命令运行osgi: java -jar org.eclipse.osgi_3.5.1.R35x_v20090827.jar -console 然后可以在./plugins目录中找到包。
有两个问题。 (1)我刚刚在本地机器上编辑了1个类文件并将其传输到远程服务器。所以我想osgi只是加载类而不是jar。我该怎么办?如果osgi框架不支持此功能。我必须打包只编辑了一个类文件的jar并将其传输到远程服务器。它是慢速打包并转移整个罐子。
(2)当我在后台运行命令时。我怎么能再次获得osgi控制台?
答案 0 :(得分:0)
可能有非标准方法来加载类,但是没有办法用纯OSGi做到这一点。在OSGi中,bundle(jar文件)是可以由OSGi框架加载和管理的交付包。通常,每个包都由一个单独的类加载器加载。 您可以获得很多:您可以指定捆绑包导出或导入的版本。在Manifest中,您可以有序地指出这些关系。这种方式OSGi框架能够在不中断其他包的情况下管理依赖关系。
答案 1 :(得分:0)
如果您尝试替换类以进行调试,可以尝试在支持热代码替换的VM上进行远程调试。这将允许您单步执行,找到问题,并在不重新启动OSGi的情况下修复它。
一旦找到修复程序,您将需要重建该修补程序。 @akr是正确的,OSGi的打包机制是捆绑包。
要回答第二个问题,如果您想要控制台,请不要在后台运行它。只需在自己的shell中运行该命令即可。在开发时,这应该不是问题。在部署时,您不应该真正使用控制台来执行操作。 Eclipse中的P2等技术可以帮助管理已部署的OSGi运行时。
答案 2 :(得分:0)
回答问题2:OSGi有shell支持telnet和SSH。使用其中一个允许您在后台运行该过程但仍然连接到它(甚至远程显然)。
答案 3 :(得分:0)
如果使用bundleContext.installBundle(字符串位置)来安装软件包,则可以在服务器上定义一个解压缩jar的文件夹。之后,您只能将该类复制到服务器文件夹,并在该软件包上调用update命令。
如果你将Eclipse与m2e和maven-bundle-plugin一起使用,你可以在保存类之后立即将目标/ classes目录同步到服务器上的文件夹(因为在那种情况下,MANIFEST.MF会立即刷新)你保存.java文件)
如您所见,您必须始终复制生成的MANIFEST.MF,以确保还会刷新Import-Package部分。
如果可以通过ssh或telnet连接到服务器(例如使用felix-osgi-console或equinox-console),可以编写一个简短的shell脚本(或windows中的cmd)来执行此操作。