我想借助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类的名称。
答案 0 :(得分:4)
如果您的捆绑包中有多个BundleActivator
实现,该怎么办?你真的很高兴使用工具决定,基本上是随机的,哪一个将是你的捆绑的主要入口点?
我觉得你错过了bnd文件的要点,这是你对bundle内容的描述。也就是说,它是一个你应该写的源文件。
另外,为什么要导出包含激活器的包?这个包在OSGi中应该是私有的。
答案 1 :(得分:4)
问题在于,正如Neil所指出的,可以有多个类实现BundleActivator。这是从现在起6个星期后浪费几个小时的好方法之一,弄清楚为什么你的代码停止工作......
无论如何,既然你似乎坚持用脚射击自己,你也可以这样做:
Bundle-Activator: ${classes;implements;org.osgi.framework.BundleActivator}
这似乎比做出接受的答案容易得多,并且在实际存在多个实施者时至少会产生错误。
无论如何,你还通过导出包含你的激活器的包来犯下另一个致命罪(在OSGi世界中)。 OSGi保持私密性的全部想法(你应该使用私有包)。
答案 2 :(得分:-1)
使用反射,您可以编写程序以获取实现所需接口的类名。
使用Ant Java Task调用该java程序。 (我建议使用单独的JVM来运行此任务,您可以在提供的链接上找到设置)
第一步中编写的程序也可用于将值写入属性文件,因此不需要属性任务。
让我知道任何进一步的澄清。