Я пытаюсь настроить приложение, которое работает на OSGi, и попытался использовать учебник here, но я получаю сообщение об ошибке «Метод getBundleContext() не определен для типа Framework« все время » , Насколько я могу судить, я использую нужную библиотеку, но в указанной статье она не указана, поэтому я не уверен на 100%. Я также попробовал примеры на веб-сайте Apache, here, что приводит к той же проблеме. Код ниже:getBundleContext метод undefined issue
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;
public class Main {
public static void main(String[] args) throws BundleException {
FrameworkFactory frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next();
Map<String, String> config = new HashMap<String, String>();
Framework framework = frameworkFactory.newFramework(config);
framework.start();
// Throws error that it cannot find method getBundleContext()
BundleContext context = framework.getBundleContext();
List<Bundle> installedBundles = new LinkedList<Bundle>();
installedBundles.add(context.installBundle("file:org.apache.felix.shell-1.4.2.jar"));
installedBundles.add(context.installBundle("file:org.apache.felix.shell.tui-1.4.1.jar"));
for (Bundle bundle : installedBundles) {
bundle.start();
}
}
}
Единственное, что имеет смысл в том, что либо я использую неправильные библиотеки или библиотеки изменились, и метод, который я пытаюсь позвонить с тех пор является устаревшим в последние 4 года. Кто-нибудь знает, как я могу это исправить?
Я сомневаюсь, что это имеет большое значение, но в случае, если это так, я использую Bndtools для Eclipse для создания этого проекта.
В любом случае, вероятно, неразумно иметь две версии библиотеки на вашем пути сборки. –
Да, это была простая ошибка, которую я пропустил. У них также были разные имена в файле, поэтому я сначала забыл об этом. Версия Bndtools называлась 'osgi.core', где более новая была фактически названа' org.apache.felix.framework'. – DGolberg
Это не просто другое имя, это другая библиотека, у него просто перекрывающееся содержимое. Felix - это реализация OSGi, тогда как 'osgi.core' - это чистый API, опубликованный Alliance OSGi. Я настоятельно рекомендую строить против 'osgi.core' ... вам просто нужно получить правильную версию. –