2014-06-12 35 views
0

我想在bnd工具的幫助下自動創建OSGi清單。對於這一點,我需要創建一個properties.bnd文件有以下兩行:Ant:獲取Java類名並寫入屬性文件

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

我的自動化腳本需要找到它實現了BundleActivator接口,在這種情況下,它是org.company.package.MyPluginActivator的Java類。以及它的包名稱,在這種情況下爲org.company.package

理想情況下,我想用Ant自動執行此操作,但對任何其他不需要以前安裝的輕量級和跨平臺工具感到滿意。

謝謝!

PS:我知道Ant屬性和PropertyFile任務,但不知道如何獲取所需java類的名稱。

回答

4

問題是,正如Neil所指出的那樣,可能有多個類實現BundleActivator。這是從現在起6周後浪費幾個小時的美妙方法之一,找出爲什麼你的代碼停止工作...

無論如何,既然你似乎堅持在腳上射擊自己,你也可以做:

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

這似乎比接受的答案容易得多,並且至少會在實際存在多個實施者時產生錯誤。

無論如何,你還通過導出包含激活器的包來犯另一個致命的罪(在OSGi世界中)。 OSGi的整個想法是保持私密(你應該使用Private-Package)。

+0

這個想法是從osgi的複雜性中庇護一個新的插件開發人員,這樣他就可以在沒有配置依賴的情況下執行他的Java魔術,然後運行一個簡單的ant腳本來創建束。 – evgeni

+0

我會根據你的建議更新我的方法,併爲我的罪惡而作出更正! – evgeni

-1

使用反射你可以編寫一個程序來獲取實現所需接口的類名。

使用Ant Java Task調用java程序。 (我建議使用單獨的JVM來運行此任務,您可以在提供的鏈接中找到設置)

第一步中編寫的程序也可用於向屬性文件寫入值,以便不需要屬性任務。

讓我知道任何進一步的澄清。

+0

謝謝,這是一個很好的方法。 – evgeni

+0

這是一個很好的方法來做非常愚蠢的事情...... –

4

如果您的捆綁包中有多個BundleActivator實現會怎麼樣?你真的很高興用一個工具來決定,基本上是隨機的,哪一個將成爲你捆綁的主要入口點?

我覺得你錯過了bnd文件的要點,它是你對包的內容的描述。也就是說,它是您應該編寫的源文件。

此外,爲什麼你想要導出包含bundle激活器的包?這個包在OSGi中應該是私有的。