Чтение версии пакета OSGI

Мне интересно, как я могу прочитать версию файла jar пакета OSGI с Java перед ее развертыванием? Есть ли способ извлечь эти данные перед их развертыванием?


person Peter Penzov    schedule 20.11.2014    source источник


Ответы (2)


Вы можете сделать это со стандартной Java:

JarFile jarFile = new JarFile("myjar.jar");
Manifest manifest = jarFile.getManifest();
Attributes mainAttributes = manifest.getMainAttributes();
String bundleVersion = (String) mainAttributes.get(Constants.BUNDLE_VERSION);

Класс констант происходит из пакета org.osgi.framework.

person Balazs Zsoldos    schedule 20.11.2014
comment
О каком другом способе вы думаете? Стандартной библиотеки для анализа файла JAR не существует. Вы можете вызывать функции Felix или Equinox напрямую, но я думаю, что они находятся во внутренних пакетах, поэтому вы не можете быть уверены, что те же самые функции будут существовать в новой версии. Вы также можете запустить встроенный контейнер OSGi, развернуть там файл jar и использовать контейнер для анализа JAR, но я думаю, что это было бы безумием :). Существует библиотека org.apache.felix.utils для разбора выражений оговорки [] (например, значения заголовка Import-Package или Bundle-SymbolicName). - person Balazs Zsoldos; 20.11.2014

Если вы просто хотите получить версию, это может быть совершенно излишним, но в целом действительно хороший способ прочитать все виды данных пакета — использовать связать. Многие инструменты построены на основе bnd, но его также легко использовать в качестве библиотеки.

person Paul Bakker    schedule 23.11.2014