0

我想在 bnd 工具的帮助下自动化我的 OSGi 清单创建。为此,我需要使用以下两行创建一个 properties.bnd 文件:

Bundle-Activator=org.company.package.MyPluginActivator
Export-Package=org.mycompany.package #or possibly multiple packages here

我的自动化脚本需要找到一个实现BundleActivator接口的 java 类,在本例中是org.company.package.MyPluginActivator. 以及它的包名称,org.company.package在这种情况下。

理想情况下,我希望使用 Ant 自动执行此操作,但对任何其他不需要预先安装的轻量级和跨平台工具感到满意。

谢谢!

PS:我知道 Ant 属性和 PropertyFile 任务,但不知道如何获取所需 java 类的名称。

4

3 回答 3

4

问题在于,正如 Neil 所指出的,可以有多个类实现 BundleActivator。这是在 6 周后浪费几个小时找出代码停止工作的原因的绝妙方法之一……

无论如何,既然你似乎坚持要在脚上射击自己,你也可以这样做:

Bundle-Activator: ${classes;implements;org.osgi.framework.BundleActivator}

这似乎比接受接受的答案容易得多,并且至少会在实际上有多个实施者时产生错误。

无论如何,您还通过导出包含您的激活器的包来犯下另一个致命的罪行(在 OSGi 世界中)。OSGi 的整个想法是保持私有(你应该为此使用 Private-Package)。

于 2014-06-12T16:37:26.250 回答
4

如果您BundleActivator的捆绑包中有多个实现怎么办?你真的很满意一个工具决定,基本上是随机的,哪个将是你的包的主要入口点?

我觉得你错过了bnd文件的重点,这是你对捆绑内容的描述。也就是说,它是您应该编写的源文件。

另外,为什么要导出包含捆绑激活器的包?这个包在 OSGi 中应该是私有的。

于 2014-06-12T16:26:46.053 回答
-1

使用反射,您可以编写一个程序来获取实现所需接口的类名。

使用Ant Java Task调用该 java 程序。(我建议使用单独的 JVM 来运行此任务,您可以在提供的链接上找到设置)

第一步编写的程序也可用于将值写入属性文件,因此不需要 Property Task。

让我知道任何进一步的澄清。

于 2014-06-12T13:46:43.277 回答