Прямого эквивалента getBundle(String symbolicName)
не существует, и в обычном OSGi нет подобных статических помощников, поскольку в виртуальной машине может быть несколько платформ.
Как указывает Амир, вы можете использовать getBundle(long id)
, чтобы получить пакет, если вы знаете его ID.
Если вам нужен пакет с заданным символическим именем, в самой высокой версии вы можете сделать что-то вроде (при условии, что у вас есть BundleContext
в наличии),
Bundle getBundle(BundleContext bundleContext, String symbolicName) {
Bundle result = null;
for (Bundle candidate : bundleContext.getBundles()) {
if (candidate.getSymbolicName().equals(symbolicName)) {
if (result == null || result.getVersion().compareTo(candidate.getVersion()) < 0) {
result = candidate;
}
}
}
return result;
}
Если по какой-то причине у вас нет BundleContext
(и я думаю, что это будут редкие случаи), вы можете попытаться найти его с помощью FrameworkUtil ,
FrameworkUtil.getBundle(getClass()).getBundleContext()
, с помощью которого вы можете получить Bundle
, который загружал данный класс, даже для фрагментов.