2010-06-23 37 views
0

使用罐子我使用java命令运行的OSGi: Java的罐子org.eclipse.osgi_3.5.1.R35x_v20090827.jar -console 然后该软件包可以在./plugins目录中找到。如何找到一个类,如果我不希望在OSGi的

有2个问题。 (1)我在本地机器上编辑了一个类文件,并将它传送到远程服务器。所以我想osgi只加载不是jar的类。我该怎么做?如果osgi框架不支持这个功能。我必须打包只编辑了一个类文件的jar文件,并将其传输到远程服务器。包装它并转移整个罐子的速度会很慢。 (2)当我在后台运行命令。我怎么能再次获得osgi控制台?

回答

0

可能有非标准的方法来加载类,但是没有办法用纯OSGi来做到这一点。在OSGi中,捆绑包(jar文件)是可以由OSGi框架加载和管理的交付包。通常,每个bundle都由一个单独的类加载器加载。 您可以获得很多:您可以指定哪些软件包具有哪个版本的软件包导出或导出。在Manifest中,您以有序的方式表示这些关系。通过这种方式,OSGi框架能够在不中断其他捆绑的情况下管理依赖关系。

0

如果您试图替换类以进行调试,您可以尝试在支持热代码替换的虚拟机上进行远程调试。这将允许您逐步查找问题并修复它,而无需重新启动OSGi。

一旦你找到修复,但你将需要重建捆绑。 @akr是正确的,OSGi的打包机制是捆绑的。

要回答你的第二个问题,如果你想要控制台,不要在后台运行它。只需在自己的shell中运行该命令即可。在开发时,这应该不成问题。在部署时,您不应该使用控制台来执行任何操作。来自Eclipse的P2等技术可以帮助管理部署的OSGi运行时。

0

回答问题2:OSGi有支持telnet和SSH的shell。使用其中之一可以让你在后台运行这个进程,但仍然可以连接到它(甚至很明显)。

0

如果您使用bundleContext.installBundle(字符串位置)来安装捆绑软件,您可以在服务器上定义一个jar文件解压缩的文件夹。之后,您可以只将该类复制到服务器文件夹,并在该包上调用更新命令。

如果在m2e和maven-bundle-plugin中使用Eclipse,只需在保存类后将目标/ classes目录简单地同步到服务器上的文件夹即可(因为在这种情况下MANIFEST.MF将尽快刷新当你保存你的.java文件)

正如你所看到的,你必须复制生成的MANIFEST.MF,以确保Import-Package部分也被刷新。

如果您可以通过ssh或telnet连接到您的服务器(例如使用felix-osgi-console或equinox-console),您可以编写一个简短的shell脚本(或cmd在windows中)来执行此操作。

相关问题