2014-10-06 44 views
0

我想打印OSGi包的版本。如何從本身內部獲取OSGi組件的版本?

class Production { 
    public Production() { 
    System.out.println("Version:" + OSGI.getMyVersion()); 
    } 
} 

這可能嗎?

+1

通過OSGi組件,你的意思是一個OSGi包?你有一個持有bundleContext或者你所在的包的變量嗎? – 2014-10-06 09:19:58

+0

如何獲取Bundle上下文? – 2014-10-06 09:37:16

+0

在這種情況下,問題是:你如何開始你的測試?你使用什麼測試框架? (基於BNDTools,PAX考試,簡單的JUnit,...) – 2014-10-06 09:47:17

回答

2

你可以使用此API的參考軟件包及其版本:

org.osgi.framework.FrameworkUtil.getBundle(getClass()).getVersion() 
+0

儘管如此,我寧願避免使用FrameworkUtil,如果有更好的方式來訪問BundleContext。例如,它會讓你的代碼很難測試,因爲很難模擬像FrameworkUtil這樣的靜態類。 – 2014-10-06 10:05:48

+0

爲什麼你需要模擬框架的一部分?我個人相信org.osgi。*包中的任何一個。 – 2014-10-06 10:08:14

+0

@ChristianSchneider ...只有當你需要訪問包(上下文)本身時才引入BundleActivator,這對我來說似乎是個開銷。藍圖更多的是開銷。 – 2014-10-06 10:10:15

0

您可以使用

BundleContext.getBundle().getVersion() 

您訪問方式的BundleContext取決於你的包裏面使用的技術。如果你使用基本的OSGi API,那麼實現一個BundleActivator來訪問BundleContext。如果您使用像Blueprint這樣的注入框架,通常可以將BundleContext注入到任何屬性中。