Как найти зависимость пакета пакета OSGi

У меня есть 2 репозитория OSGi Bundle. Я хочу использовать API, чтобы проверить, есть ли у пакета какие-либо проблемы с зависимостями при условии, что 2 obr. Как я могу вызвать API для этого? Кажется, для этого я могу использовать следующий код с Felix API. Но как я могу получить объект RepositoryAdmin?

RepositoryAdmin repoAdmin = ...
repoAdmin.addRepository(new File("/home/chandler/ws/reliability/testParent/test.eba/target/localobr/repository.xml").toURI().toURL());
repoAdmin.addRepository(new File("/home/chandler/geronimo3/var/obr.xml").toURI().toURL());
List<Repository> repos = new ArrayList<Repository>();
for(Repository repo : repoAdmin.listRepositories()) {
repos.add(repo);
}       
repos.add(repoAdmin.getSystemRepository());
repos.add(getLocalRepository(repoAdmin));
Resolver resolver = repoAdmin.resolver(repos.toArray(new Repository[0]));
Resource resources[] = repoAdmin.discoverResources("(&(presentationname=*)(symbolicname=com.chandler.app.osgi.test))");
resolver.add(resources[0]);
boolean resolved = resolver.resolve();

person Chandler Zhang    schedule 02.04.2013    source источник


Ответы (1)


org.apache.felix.bundlerepository-x.y.z.jar должен быть установлен и запущен в вашей среде OSGi. Вы можете получить службу RepositoryAdmin из экземпляра BundleContext.

person Dmytro Pishchukhin    schedule 02.04.2013
comment
Да, он установлен в Eclipse. Я могу получить RepositoryAdmin с помощью следующего кода ServiceTracker m_tracker = new ServiceTracker(ctx, RepositoryAdmin.class.getName(), null); m_tracker.open(); // for (Bundle b : ctx.getBundles()) { // if (b.getSymbolicName().contains( // org.apache.felix.bundlerepository)) { // b.start(); // } // } RepoAdmin repoAdmin = (RepositoryAdmin) m_tracker.getService(); - person Chandler Zhang; 02.04.2013
comment
Да, он установлен в Eclipse. Я могу получить RepositoryAdmin. Но когда я пытаюсь разрешить пакет, возвращаемое значение ложно. И во время решения первое неудовлетворенное требование — это пакет: (& (symbolicname = system.bundle)). Как мне настроить system.bundle? - person Chandler Zhang; 02.04.2013