我想打印OSGi包的版本。如何從本身內部獲取OSGi組件的版本?
class Production {
public Production() {
System.out.println("Version:" + OSGI.getMyVersion());
}
}
這可能嗎?
我想打印OSGi包的版本。如何從本身內部獲取OSGi組件的版本?
class Production {
public Production() {
System.out.println("Version:" + OSGI.getMyVersion());
}
}
這可能嗎?
你可以使用此API的參考軟件包及其版本:
org.osgi.framework.FrameworkUtil.getBundle(getClass()).getVersion()
儘管如此,我寧願避免使用FrameworkUtil,如果有更好的方式來訪問BundleContext。例如,它會讓你的代碼很難測試,因爲很難模擬像FrameworkUtil這樣的靜態類。 – 2014-10-06 10:05:48
爲什麼你需要模擬框架的一部分?我個人相信org.osgi。*包中的任何一個。 – 2014-10-06 10:08:14
@ChristianSchneider ...只有當你需要訪問包(上下文)本身時才引入BundleActivator,這對我來說似乎是個開銷。藍圖更多的是開銷。 – 2014-10-06 10:10:15
您可以使用
BundleContext.getBundle().getVersion()
您訪問方式的BundleContext取決於你的包裏面使用的技術。如果你使用基本的OSGi API,那麼實現一個BundleActivator來訪問BundleContext。如果您使用像Blueprint這樣的注入框架,通常可以將BundleContext注入到任何屬性中。
通過OSGi組件,你的意思是一個OSGi包?你有一個持有bundleContext或者你所在的包的變量嗎? – 2014-10-06 09:19:58
如何獲取Bundle上下文? – 2014-10-06 09:37:16
在這種情況下,問題是:你如何開始你的測試?你使用什麼測試框架? (基於BNDTools,PAX考試,簡單的JUnit,...) – 2014-10-06 09:47:17